我正在尝试学习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();
}
答案 0 :(得分:1)
InputStream.read()是一个阻塞调用。鉴于您提供的代码,您在写入套接字之前正在读取套接字,因此您将永久阻止第一次读取。或者至少等到超时。
答案 1 :(得分:-1)
@Peter可能是对的。此外,在使用后关闭流可能有助于避免意外问题。