无法从套接字读取

时间:2016-09-16 12:45:42

标签: java sockets

我有一个充当客户端线程的类。 在类中,我有一个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,它只是继续尝试从套接字读取数据并且卡住了。

我该如何解决这个问题?我究竟做错了什么? 任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:1)

当另一个通信端实际关闭其输出时,Stream只能返回-1,即发出结束信号,以确保不再传输数据。

答案 1 :(得分:0)

无法重现。您的代码永远不会从读取中获得零。如果你没有得到-1,那是因为对等体永远不会关闭连接。