我是套接字编程和线程的新手。如果有人能帮助我,我会很高兴。 我目前正在解决多客户端服务器问题,其中每个新客户端连接都有自己的线程和applet。这是在断开连接时关闭客户端线程的时间的代码片段。
String inputMessage; //message stored here
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
while((inputMessage = in.readLine()) != null){
//Update message buffer with message that client has typed
buffer.insertMessage(inputMessage);
}
// Close things
in.close();
socket.close();
因此,当从BufferedReader读取null时,它将退出while循环。 我的问题是这在linux中完美运行。当在applet的角落按下x时,bufferedReader获取null并且线程正常终止。
当我在Windows中尝试这个时,我得到一个SocketException:Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
当applet关闭时,windows和linux会做些不同的事情吗?或者是我的代码
答案 0 :(得分:0)
尝试Scanner
并在获得hasNextLine()
nextLine()
示例代码:
Scanner scanner = new Scanner(new InputStreamReader(socket.getInputStream()));
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
答案 1 :(得分:0)
您已写入已经被对等方关闭的连接,或者对等方已退出而根本没有关闭套接字。