关于SOCKET通信的奇怪问题
我的SOCKET服务器通信是这样的:
函数1:
public class Connectors extends Thread {
public Connectors(ConnectPara para) {
start();
}
public void run(){
//int count=0;
try{
ServerSocket serversocket = new ServerSocket(m_para.ListenPort);
while(true){
Socket socket=serversocket.accept();
// 启动连接服务进程
if(m_para.CheckAccess(socket)){
new Connector(socket,m_para);
}
else{
socket.close();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
函数2:
import java.io.*;
import java.net.*;
import java.util.*;
public class Connector extends Thread{
/** 网络连接*/
private Socket socket;
/** 网络输入数据流*/
private InputStream in;
/** 网络输出数据流*/
private OutputStream out;
/** 构造函数*/
public Connector(Socket s,ConnectPara para){
socket=s;
m_para=para;
try{
socket.setSoTimeout(600);//超时时间
in=socket.getInputStream();
out=socket.getOutputStream();
start();
} catch(Exception e){
if(QuietMode==0){
e.printStackTrace();
}
}
}
public void run(){
actived=1;
try{
byte[] tmp=new byte[3652];
byte[] buf=new byte[3652];
int count=0,received=0;
while(true){
try{
System.out.println("开始读取");//这行打出来了
count=in.read(tmp,0,3652);//此处死了,执行到此处就不往下走了!是否跟Socket通信函数读取器有关系????
System.out.println("结束读取");//这行没打出来
received+=count;
}catch(Exception e){
e.printStackTrace();
break;
}
}
buf="fdsafds".getBytes();
out.write(buf);
out.flush();
} catch(Exception e){
e.printStackTrace();
actived=0;
}
}
}
-----------------------
客户端是这么掉用的:
public String send(String sendstring)throws Exception{
String returnstring = "";
try{
//新建Socket通信
Socket socket = new Socket(ip,port);
//通信输出字节流
OutputStream out = socket.getOutputStream();
out.write(sendstring.getBytes("GBK"));
out.flush();
log.info("send:"+sendstring);
//-----------开始接收-------------
byte[] buf = new byte[65536];
InputStream in=socket.getInputStream();
int count = in.read(buf);
returnstring = new String(buf,"GBK");
System.out.println(returnstring);
}catch(Exception e){
e.printStackTrace();
}
return returnstring ;
}
-------------
问题如下:
正常情况下能进行通信,但每回新建立连接时第一次服务器就读取不到数据,接下来可以读取!
有人遇到过这种问题么???
一般第一次服务器启动时才会出现,问题在服务器端的Connector下的读取器死了,出不来了!!!