Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过套接字通过网络发送序列化的自定义对象_Java_Sockets_Serialization_Network Programming_Client Server - Fatal编程技术网

Java 通过套接字通过网络发送序列化的自定义对象

Java 通过套接字通过网络发送序列化的自定义对象,java,sockets,serialization,network-programming,client-server,Java,Sockets,Serialization,Network Programming,Client Server,我正在编写一个基本的服务器/客户机代码,以便使用套接字通过网络发送一些自定义对象 我的自定义对象还有一些已初始化的自定义字段。 例如 ``` ``` 在客户端,我正在编写如下对象: ``` 并在服务器上接收它们,如下所示: ServerSocket server = new ServerSocket(PORT); try (Socket s = server.accept(); ObjectInputStream inputStream = new ObjectInputStream(

我正在编写一个基本的服务器/客户机代码,以便使用套接字通过网络发送一些自定义对象

我的自定义对象还有一些已初始化的自定义字段。
例如 ```

```

客户端,我正在编写如下对象: ```

并在服务器上接收它们,如下所示:

ServerSocket server = new ServerSocket(PORT);
try (Socket s = server.accept();
     ObjectInputStream inputStream = new ObjectInputStream(s.getInputStream())) {
            CustomObject machine = (CustomObject) inputStream.readObject();
            System.out.println(machine);
        } catch (ClassNotFoundException e) {
            System.err.println("Err! Could not cast");
        }
现在,在服务器端,一切运行都没有错误,当我调试时,我看到一个、两个和三个自定义对象是NULL,但不是基本字符串somestring

请问,在这个例子中,我遗漏了什么或做错了什么

注意一、二和三种类型定义也实现了可序列化

服务器和客户端都可以访问所有自定义类定义。我认为,最好的方法是先将对象序列化(到JSON或XML)。然后将此输出字符串转换为字节(可选),并通过套接字发送,在另一端,反转这些步骤以获取对象


此过程还允许您在将来实现加密(如有必要)。

Java序列化是一个非常强大的协议。java.io.ObjectOutputStream和java.io.ObjectInputStream是更高级别的类,当然它们是用较低级别的类包装的,例如FileInputStream和FileOutputStream。我的问题是,当可以在对象中读取整个文件时,为什么希望逐字节读取文件

下面是对该过程的一个很好的解释


是的,我同意。我这样做只是为了学习。我遇到了这个问题,我需要知道到底出了什么问题。
Socket s = new Socket(HOST,PORT);
new ObjectOutputStream(s.getOutputStream())
    .writeObject(machine);
ServerSocket server = new ServerSocket(PORT);
try (Socket s = server.accept();
     ObjectInputStream inputStream = new ObjectInputStream(s.getInputStream())) {
            CustomObject machine = (CustomObject) inputStream.readObject();
            System.out.println(machine);
        } catch (ClassNotFoundException e) {
            System.err.println("Err! Could not cast");
        }