当前位置: 首页 > 知识库问答 >
问题:

关闭套接字时的SocketException

公冶森
2023-03-14

因此,我有一个客户机wich连续发送和接收数据消息,wich工作正常,然而,当我关闭/停止客户机时,我会得到以下单行错误:

java.net.SocketException: Socket closed

尽管我试图关闭插座--最终封闭了。现在我的问题是为什么我会收到这个错误,这个行为是否正常,以及如何正确处理这个错误。下面是我的代码:

public static void main(String[] args) throws UnknownHostException, IOException {
    
    Socket socket = null;
    
    try {
        socket = new Socket("localhost", 9101);
         
        PrintWriter out = new PrintWriter(socket.getOutputStream());
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        
        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {

                while(true) {
                    try {
                        System.out.println(in.readLine());
                    } catch (IOException e) {
                        e.printStackTrace();
                        System.out.println("error");
                    }
                }
            }
        });
        thread.start();
        
        System.out.println("Write to server:");
        
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNextLine()) {
            String message = scanner.nextLine(); 

            out.println(message);
            out.flush();

        };
    } finally {
        socket.close();
    }
}

共有1个答案

宰父冠玉
2023-03-14
if(socket.isClosed())
   System.out.println(in.readLine());
 类似资料:
  • 我最近一直在玩套接字,但是我遇到了一个问题…当我从服务器接收数据时,我得到一个“java.net.套接字异常:套接字关闭”异常。我没有在任何地方关闭套接字,事实上,我唯一使用关闭()的地方是扫描仪上从System.in读取文本; 以下是我的代码: 客户: 服务器: 数据包发送者: 客户端接收器: 数据包接收器:

  • 我正在为客户机发送对象到服务器,在服务器端修改该对象,并将其重新发送到客户机。将对象从客户机发送到服务器很好,它工作正常,但当我将对象发送回来时,它给出了异常,Socket关闭。这里是代码。IntString和ParentObj是我要发送对象的类。 服务器类 用于发送和接收对象的Send_recv类。

  • 问题内容: 我有一个使用简单套接字在两个系统之间传递某些字符的应用程序。我的Java应用程序作为服务器运行。我建立了良好的连接,甚至传递了一条消息。但是,发送完一条消息后,我的连接关闭。 从我可以看出来的好像是在关闭时,套接字本身正在关闭吗?!这很不好,因为我有多个要在同一连接上发送的消息。 我吃饱了吗?如何在Java中维护此连接? 问题答案: 是的,关闭任何作家/读者将关闭他们包装的所有其他作家

  • 我想创建能够与多个客户端连接的服务器,但我总是收到“套接字关闭”异常或从输入流中读取空值,以前我认为这是由于以错误的方式关闭套接字连接引起的,所以我发布了这个主题,但现在似乎这不是问题所在。 服务器方法 HandlerThread类 客户端模拟器 例外和问题 在客户端模拟器之前启动服务器,客户端模拟器没有任何异常,但是在服务器端,并没有收到所有数据,从控制台打印信息时,我看到“null”、“Hel

  • 问题内容: 有人可以解释一下Java套接字中的以下行为: 总体思路是这样的: 打开套接字,获取I / O流。 写请求,关闭流 读取响应,关闭流 关闭插座。 这是我的问题。 如果我将a 用于输出,然后将其关闭,则它将关闭整个套接字,并且随后的读取操作将失败。 相反,如果我直接使用套接字的方法,它将正确关闭输出流通道,同时使套接字保持活动状态。 为什么关闭对象会使整个插槽都掉下来? 问题答案: 这可能

  • 我有一个java应用程序,它使用一个内部代理服务器来分析web应用程序的http trafic(在浏览器-Prism或Chrome/Chromium中),这实际上是同一个应用程序的一部分。基于trafic分析,它执行了一些操作。 该应用程序在Windows(XP,7和8)中运行良好,我也在Ubuntu和SUSE中使用它没有任何问题。最近,一个新的潜在客户想在CentOs中测试它,但我发现java.