Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有小程序的客户端/服务器套接字的Windows/Linux问题_Java_Applet_Client Server - Fatal编程技术网

Java 带有小程序的客户端/服务器套接字的Windows/Linux问题

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

我是套接字编程和线程方面的新手。如果有人能帮我,我会很高兴的。 我目前正在处理一个多客户端服务器问题,其中每个新的客户端连接都有自己的线程和一个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中非常有效。当在小程序的角落中按下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()也不能解决这个问题。