无法从InputStream读取数据

时间:2013-10-31 19:35:07

标签: java sockets socket.io inputstream

我正在尝试学习java套接字编程,但是我在使用InputStream的read函数时遇到了麻烦。 首先,我创建了一个连接到服务器的套接字。建立连接后,服务器然后发回“建立连接”的消息,并且读取功能正常工作。然后我尝试向服务器发送字节消息,但我无法从InputStream读取数据,因为我的程序停留在“in.read(buf)”行。任何人都可以指出我如何解决这个问题。

Socket client = new Socket("xxx.xxx.xxx.xxx", 45000);
    InputStream in = client.getInputStream();
    OutputStream out = client.getOutputStream();
    for (int i = 0; i < 5; i++) {
        byte[] buf = new byte[1024];
        int data_size = in.read(buf);
        String msg = "";
        for (int j = 0; j < data_size; j++) {
            msg += String.valueOf((char) buf[i]);
        }
        System.out.println(msg);
        out.write(65);
        out.flush();
    }

2 个答案:

答案 0 :(得分:1)

InputStream.read()是一个阻塞调用。鉴于您提供的代码,您在写入套接字之前正在读取套接字,因此您将永久阻止第一次读取。或者至少等到超时。

答案 1 :(得分:-1)

@Peter可能是对的。此外,在使用后关闭流可能有助于避免意外问题。