[英]Reading from Socket to String
我正在尝试从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。 客户端应在断开连接(或执行其他操作)之前回复/写入最后一条消息,通知文件结束。
当对等方断开连接时,readLine()方法仅返回null。 如果要打印每一行,请在读取循环内执行。
还有其他问题:
“ while socket.isConnected()”测试毫无意义。 它已连接,它将保持连接状态。 当对等方断开连接时,连接不会神奇地变为假。 阅读时,您已经在测试流的结尾。 您不需要围绕它的另一个循环。
每次在该外部循环周围创建一个新的BufferedReader都将无法进行:这只会导致数据丢失
读取和接受循环中的睡眠也完全没有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.