Java 带有小程序的客户端/服务器套接字的Windows/Linux问题
我是套接字编程和线程方面的新手。如果有人能帮我,我会很高兴的。 我目前正在处理一个多客户端服务器问题,其中每个新的客户端连接都有自己的线程和一个applet。下面是一段代码片段,说明在客户端断开连接时何时关闭线程Java 带有小程序的客户端/服务器套接字的Windows/Linux问题,java,applet,client-server,Java,Applet,Client Server,我是套接字编程和线程方面的新手。如果有人能帮我,我会很高兴的。 我目前正在处理一个多客户端服务器问题,其中每个新的客户端连接都有自己的线程和一个applet。下面是一段代码片段,说明在客户端断开连接时何时关闭线程 String inputMessage; //message stored here BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputS
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中非常有效。当在小程序的角落中按下x时,bufferedReader将获得null,线程将正常终止
当我在windows中尝试此操作时,我得到一个SocketException:连接重置
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)
当小程序关闭时,windows和linux是否做了一些不同的事情,或者它是我的代码在获取
nextLine()之前,请尝试使用Scanner
并检查hasNextLine()
示例代码:
Scanner scanner = new Scanner(new InputStreamReader(socket.getInputStream()));
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
您可能已写入已被对等方关闭的连接,或者对等方根本没有关闭套接字就退出了连接。不,不会。它将导致read()返回-1,readLine()返回null,readXXX()抛出任何其他XXX的EOFEException。调用ready()也不能解决这个问题。