我正在尝试从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。客户端应在断开连接(或执行其他操作)之前回复/写入最后一条消息,通知文件结束。

07-26 09:40