【发布时间】:2021-11-19 20:40:21
【问题描述】:
我有一个套接字,我想从客户端发送到服务器(或反向)。
当 java.net.Socket 属于 java.lang.Object 时,为什么不能使用 ObjectStream 完成?我怎样才能正确地做到这一点?
这是Server.java:
package com.company;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket ss = new ServerSocket(1234); // make server on localhost:1234
Socket socket = ss.accept();
System.out.println("Connection from " + socket + "!\n");
InputStream inputStream = socket.getInputStream();
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Socket receivedSocket = (Socket) objectInputStream.readObject();
System.out.println(receivedSocket);
ss.close();
socket.close();
}
}
这是Client.java:
package com.company;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 1234); // make socket on localhost:1234
OutputStream outputStream = socket.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(socket); // send `socket` over network
socket.close();
}
}
在Client 方面,它向我抛出了这个异常:
Exception in thread "main" java.io.NotSerializableException: java.net.Socket
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1192)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:352)
at com.company.Client.main(Client.java:14)
这在Server 方面:
Exception in thread "main" java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.net.Socket
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1696)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:495)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:453)
at com.company.Server.main(Server.java:17)
Caused by: java.io.NotSerializableException: java.net.Socket
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1192)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:352)
at com.company.Client.main(Client.java:14)
提前致谢!
【问题讨论】:
-
不,你不能。这没有意义。可以传真传真机吗?
-
您能否分享更多有关您尝试使用此功能实现的目标的信息?这可能是任何人都能够帮助您的唯一方法。
-
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
标签: java sockets server tcp client