我有一个读取和写入网络套接字的线程。
public void run() {
try {
Socket socket = new Socket("10.0.1.11", 19456);
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = "13" + seperator + "0" + seperator + "userdata";
out.write(message);
out.flush();
while (listen) {
String input = "";
for (int letter = in.read(); letter != -1; letter = in.read()) {
System.out.println((char)letter);
input += (char)letter;
}
System.out.println(input);
displayText(input);
}
socket.close();
} catch (UnknownHostException e) {
displayText("Could not connect to server!");
} catch (IOException e) {
displayText("Could not open IO to server!");
}
}
但是,不执行for循环之后的所有内容。 for循环中的System.out.println打印出它应该的所有字母,但for循环之后的System.out.println和displayText函数永远不会被执行(用断点检查)...我错过了什么这里? :S
答案 0 :(得分:3)
根据http://www.docjar.com/docs/api/java/io/Reader.html#read
This method will block until a character is available,
an I/O error occurs, or the end of the stream is reached.
他们的代码示例确实显示他们在EOF上返回-1。
所以,你的for循环是阻塞的,因为 in.read()无法识别EOF条件。
在套接字服务器关闭其发送方向之前它不能这样做,这会关闭客户端的接收端。
答案 1 :(得分:0)