java.net.SocketException 套接字已关闭

2023-12-21

我正在将客户端的对象发送到服务器,在服务器端修改该对象并将其重新发送到客户端。将对象从客户端发送到服务器是正常的,它可以正常工作,但是当我将对象发送回去时,它会给出异常套接字已关闭。这是代码。 IntString 和 ParentObj 是我要发送对象的类。

客户端1类:

import java.net.*;
import java.io.*;

public class Client1 {
    public static void main(String args[]) {
        int arr[] = new int[10];
        int length = 6, i, counter_1;
        ParentObj obj1;
        for (i = 0; i < length; i++) {
            arr[i] = i + 10;
        }
        try {
            Socket s = new Socket("localhost", 6789);
            IntString obj = new IntString(arr, length);
            /*
             * OutputStream os = s.getOutputStream(); 
             * ObjectOutputStream oos = new ObjectOutputStream(os);
             * 
             * oos.writeObject(obj); 
             * oos.close(); 
             * os.close();
             */
            Send_recv snd = new Send_recv(s);
            snd.sendObj((ParentObj) obj);

            if (s.isClosed()) {
                System.out.println("Closed");
                // s.connect(null);
            }
            obj1 = snd.recObj();
            obj = (IntString) obj1;
            if (obj != null) {
                for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) {
                    System.out.println(obj.row[counter_1]);
                    obj.row[counter_1]++;
                }
            }

            // s.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

服务器类

import java.net.*;
import java.io.*;

public class Server1 {
    public static void main(String args[]) {
        IntString obj;
        ParentObj obj1;
        int port = 6789, counter_1;
        try {
            ServerSocket ss = new ServerSocket(port);
            Socket s = ss.accept();
            Send_recv rev = new Send_recv(s);
            /*
             * InputStream is = s.getInputStream(); 
             * ObjectInputStream ois = new ObjectInputStream(is); 
             * IntString obj = (IntString)ois.readObject();
             */
            obj1 = rev.recObj();
            obj = (IntString) obj1;
            System.out.println(s.getInetAddress());
            System.out.println(s.getLocalAddress());
            if (obj != null) {
                for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) {
                    System.out.println(obj.row[counter_1]);
                    obj.row[counter_1]++;
                }
            }
            if (ss.isClosed()) {
                System.out.println("Closed ss");

            }
            if (s.isClosed()) {
                System.out.println("Closed in Server");

            }
            Send_recv snd = new Send_recv(s);
            snd.sendObj((ParentObj) obj);

        } catch (Exception e) {
            System.out.println(e + "In Server");
        }

    }
}

Send_recv 类用于发送和接收对象。

import java.io.*;
import java.net.*;

public class Send_recv {
    Socket s;
    IntString obj1;

    public Send_recv(Socket s) {
        this.s = s;
    }

    public void sendObj(ParentObj obj) {
        try {
            OutputStream os = s.getOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(obj);
            oos.close();
            os.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public ParentObj recObj() {

        try {
            InputStream is = s.getInputStream();
            ObjectInputStream ois = new ObjectInputStream(is);
            obj1 = (IntString) ois.readObject();
            ois.close();
            is.close();

        } catch (Exception e) {
            System.out.println(e);
        }
        return (obj1);
    }
}

java.net.SocketException socket is closed

这个异常意味着you关闭套接字,然后继续尝试使用它。

os.close();

而你却在这里关闭了它。关闭 a 的输入或输出流Socket关闭另一个流和Socket.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.net.SocketException 套接字已关闭 的相关文章

  • 删除匿名监听器

    当尝试采用使用匿名或嵌套类实现侦听器的风格时 以便隐藏除侦听之外的其他用途的通知方法 即我不希望任何人能够调用actionPerformed 例如来自java动作监听器 实现与匿名类 https stackoverflow com ques
  • JPA:运行时如何指定类对应的表名?

    注意 我对 Java 非常熟悉 但对 Hibernate 或 JPA 还不太熟悉 还没有 我想编写一个通过 JPA 与 DB2 400 数据库通信的应用程序 现在我可以获取表中的所有条目并将它们列出到 System out 使用 MyEcl
  • 将图像作为 JPanel 的背景

    我是 Java 新手 目前正在创建一个带有图形的游戏 我有这个课程从JFrame 在这个班级里 我有很多JPanel需要图像作为背景 据我所知 为了能够在 JPanel 中绘制图像 我需要一个从 JPanel 扩展的单独的类以及该类的pai
  • Maven 管理的 Java EE 应用程序中 JBoss 提供的库

    这对我来说实际上不太可能 但网上似乎没有关于将 JBoss 提供的依赖项导入 Maven 管理的 Java EE 应用程序以在其中部署的直接答案 据我所知 有两件事与这个问题有关 那就是jboss as client外部 就 JVM 而言
  • 构建 jar 后无法运行 exe

    我制作了一个简单的实用应用程序 其中我有一个要运行的exe文件 我通过使用它来运行 Runtime getRuntime exec this getClass getResource filename exe getPath 当我从 ide
  • 用于将字符串与预定义字符混合/混淆的简单算法

    我有一个字符串如下 它的长度是10 它代表基数 36 因此包含数字和大写字母 字符串的来源是数据库生成的序列 即从 1 及以上 正在转换为基数 36 我的问题是转换为base 36转换的结果也是连续 顺序的 例如 ID 1402 gt 00
  • 无法解析导航抽屉中片段中的 getSystemService

    我正在尝试实现一个导航抽屉 其中有一个片段中的地图 这是我的代码 这里是fragment map xml
  • 是否值得清理 Filter 中的 ThreadLocals 来解决线程池相关问题?

    简而言之 tomcat 使用线程池 因此线程被重用 一些图书馆使用ThreadLocal变量 但不要清理它们 使用 remove 所以实际上它们将 脏 线程返回到池中 Tomcat 具有在关闭时检测这些事情并清理线程局部变量的新功能 但这意
  • Android - Firebase - 保存新数据而不覆盖旧数据

    创建此问题是因为我之前的问题包含 2 个问题 而不是将其缩小到 1 Aim 用户将能够存储新数据而不会覆盖之前提交的数据 描述 目前 当用户输入新报告时 事件报告节点中的用户事件报告数据将被覆盖 用户发送的旧事件报告中的数据应与新数据一起保
  • Spring Boot 是否支持服务器名称指示(SNI)?

    Spring Boot 是否支持服务器名称指示 SNI 具体来说 运行嵌入式 Tomcat 服务器并打包为可执行 jar 文件的 Spring Boot 2 2 2 RELEASE 应用程序是否可以根据传入请求的主机名支持多个 SSL 证书
  • Java中的String为什么是不可变的对象,但我在创建一个对象后仍然可以更改它的值? [复制]

    这个问题在这里已经有答案了 如果我可以创建一个字符串并给它一个值 这怎么可能呢 然后 我可以像这样简单地覆盖它的值 String a abc a def 我怎么可能改变的值a 我一定在这里遗漏了一些东西 我知道每当创建 String 对象时
  • 适当支持不区分大小写的映射

    我想实现一个不区分大小写的哈希映射 这个问题本身并不新鲜 但我想添加额外的功能 但不知道要采取什么总体方向 我希望客户能够做这样的事情 boolean preserve case true Map
  • 如何使用 apache commons cli 指定多个选项?

    我想要这样的东西 java programName jobs1 C 10 W 20 java programName job2 java programName job3 含内容 Option o1 new Option job2 some
  • 如何使用spring data mongodb在mongodb中创建视图

    如何使用spring data mongodb在mongodb中创建视图 谢谢 您可以在需要的地方注入 org springframework data mongodb core MongoTemplate 类型的 bean 并使用其方法之
  • Spring Boot,使用 EhCache 进行缓存

    我需要在我的应用程序中缓存一些数据 我正在考虑使用 Ehcache 我有几个问题 Ehcache需要另外一台服务器吗 我需要其他客户端来使用 Ehcache 吗 Ehcache 如何与多个实例配合使用 是否有可能使用 Ehcache 创建类
  • 使用 Hibernate 作为 ORM 机制的 Web 应用程序中的 L1 和 L2 缓存有什么区别?

    我只想要一些有关使用 L1 缓存和 L2 缓存的标准用途的一般信息 我很好奇 因为我正在研究使用赤土陶器作为二级缓存的系统 并且我发现它也有一级缓存 L1 缓存是每个 Hibernate 会话都存在的缓存 并且该缓存不在线程之间共享 该缓存
  • 如何告诉杰克逊在反序列化期间忽略空对象?

    在反序列化过程中 据我理解是将JSON数据转换为Java对象的过程 我如何告诉Jackson 当它读取不包含数据的对象时 应该忽略它 我正在使用 Jackson 2 6 6 和 Spring 4 2 6 我的控制器收到的JSON数据如下 i
  • 如何将 JAVAX-WS 端点绑定更改为 SOAP 1.2?

    我正在使用发布测试 WS 实现Endpoint publish 用于在 Visual Studio 中使用 根据文档 http metro java net nonav 1 2 docs endpoint html默认的 SOAP 绑定是1
  • Java中如何对整数除法进行四舍五入并得到int结果? [复制]

    这个问题在这里已经有答案了 我刚刚写了一个小方法来计算手机短信的页数 我没有选择使用Math ceil 老实说 它看起来很丑陋 这是我的代码 public class Main param args the command line arg
  • 我可以在方法体内使用注释吗?

    允许 Java 注释的语义将它们放置在某处在函数体内 例如注释特定的函数调用 语句或表达式 例如 class MyClass void theFunc Thing thing String s null Catching NullPoint

随机推荐