我有一个充当客户端线程的类。
在类中,我有一个run
方法,用于处理来自套接字的读写操作。
我的run方法如下所示:
public void run(){
System.out.println("New connection at " + new Date() + "\n");
try {
DataInputStream in = new DataInputStream (threadSocket.getInputStream());
out = new DataOutputStream (threadSocket.getOutputStream());
while (running){
// read input from client
byte[] input = new byte [200];
int count = in.read(input);
if (count == -1) {
running = false;
break;
}
String msg = new String(input, 0, count);
// parse in going message
messageParsing(msg);
// respond to client
response();
}
}
catch (IOException ex) {ex.printStackTrace();}
finally {
try {
threadSocket.close();
System.out.println("Connection closed.\n");
} catch (IOException ex) {ex.printStackTrace();}
}
}
我创建了一个固定大小的字节数组,我正在从套接字读取数据。 进入数据的可用长度为147和61,如果输入数据的长度为0,则不代表任何事情。 我想在计数为-1时关闭套接字,但我没有成功。 看起来当没有数据时,count为0,它只是继续尝试从套接字读取数据并且卡住了。
我该如何解决这个问题?我究竟做错了什么? 任何帮助,将不胜感激。
答案 0 :(得分:1)
当另一个通信端实际关闭其输出时,Stream只能返回-1,即发出结束信号,以确保不再传输数据。
答案 1 :(得分:0)
无法重现。您的代码永远不会从读取中获得零。如果你没有得到-1,那是因为对等体永远不会关闭连接。