我正在尝试从Socket的InputStream读取到String变量,然后打印它。但是,以某种方式,这不能正常工作。 receivedText
仅在客户端断开连接时才打印到控制台。我的代码有什么问题?
public xClient(Socket socket)
{
Thread receiver = new Thread(){
public void run()
{
String receivedText = "";
while(socket.isConnected())
{
try {
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = input.readLine()) != null)
{
receivedText += line;
}
if(!receivedText.equals(""))
{
System.out.println(receivedText);
receivedText = "";
}
Thread.sleep(10);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
receiver.start();
}
主要方法:
ServerSocket socket = new ServerSocket();
socket.bind(new InetSocketAddress("127.0.0.1",9200));
Thread accepting = new Thread(){
public void run()
{
while(true)
{
try {
Socket received = socket.accept();
new xClient(received);
System.out.println("OK");
Thread.sleep(10);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
accepting.start();
最佳答案
在下面的代码中..
while((line = input.readLine()) != null)
{
receivedText += line;
}
readLine()函数等待,直到获得输入行或流结束的指示。您正在循环中对照null进行检查。仅当流结束或客户端断开连接时,它才会回复null。客户端应在断开连接(或执行其他操作)之前回复/写入最后一条消息,通知文件结束。