0

我正在尝试学习java套接字编程,但是我在InputStream的读取功能上遇到了麻烦。起初,我创建了一个套接字来连接到服务器。连接建立后,服务器返回“连接建立”的消息,读取功能正常。然后我尝试向服务器发送字节消息,但我无法从 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();
    }
4

2 回答 2

1

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

于 2013-10-31T19:46:47.940 回答
-1

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

于 2013-10-31T20:43:35.803 回答