【问题标题】:Windows/Linux issue with Client/Server Socket with Applet带有 Applet 的客户端/服务器套接字的 Windows/Linux 问题
【发布时间】:2014-04-30 10:41:33
【问题描述】:

我是套接字编程和线程的新手。如果有人可以帮助我,我会很高兴。 我目前正在研究一个多客户端服务器问题,其中每个新客户端连接都有自己的线程和一个小程序。这是一个代码sn-p,当它断开连接时,何时关闭客户端的线程。

   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: 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)

当小程序关闭时windows和linux会做不同的事情还是我的代码

【问题讨论】:

    标签: java applet client-server


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      尝试使用Scanner 并在获取nextLine() 之前检查hasNextLine()

      示例代码:

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

      【讨论】:

      • 不,不会的。这将导致 read() 返回 -1,readLine() 重新调整 null,readXXX() 为任何其他 XXX 抛出 EOFException。调用 ready() 也不能解决这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2016-12-21
      • 2016-11-19
      • 2021-03-31
      • 1970-01-01
      相关资源
      最近更新 更多