繁体   English   中英

从套接字读取到字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM