java.net.SocketException 套接字已关闭

标签 java socketexception

我正在将客户端的对象发送到服务器,在服务器端修改该对象并将其重新发送到客户端。将对象形式的客户端发送到服务器可以正常工作,但是当我发送回对象时,它给出异常 Socket is closed。这是代码。 IntString 和 ParentObj 是我发送对象的类。

Client1类:

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

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

os.close();

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

关于java.net.SocketException 套接字已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15239398/

相关文章:

C# 引用的对象类型不支持尝试的操作

java - TextView 中从右到左的文本

java - 将密码套件 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 添加到 Java 7

java - 在 c3p0 池中检查连接

c# - "The requested address is not valid in its context"套接字异常

C# SocketException 没有被捕获

java - 子类中的 spring aop 建议方法

java - 通过仅传递一个对象进行手动二进制搜索

java - Java 中的可选平面图有 NullPointerException

Java:重新连接套接字有时会出现错误