带有Applet的Client / Server Socket的Windows / Linux问题

时间:2014-04-30 10:41:34

标签: java applet client-server

我是套接字编程和线程的新手。如果有人能帮助我,我会很高兴。 我目前正在解决多客户端服务器问题,其中每个新客户端连接都有自己的线程和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会做些不同的事情吗?或者是我的代码

2 个答案:

答案 0 :(得分:0)

尝试Scanner并在获得hasNextLine()

之前检查nextLine()

示例代码:

Scanner scanner = new Scanner(new InputStreamReader(socket.getInputStream()));
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

答案 1 :(得分:0)

您已写入已经被对等方关闭的连接,或者对等方已退出而根本没有关闭套接字。