gpt4 book ai didi

Java "NotSerializableException: java.net.Socket"不发送套接字时

转载 作者:行者123 更新时间:2023-12-02 04:19:58 24 4
gpt4 key购买 nike

因此,我使用此线程将 Server 对象发送到客户端:

public ConnectionThread(final Server server) {
super(new Runnable() {
public void run() {
try {
Socket client = server.serverSocket.accept();
server.clients.add(client);

ObjectInputStream in = new ObjectInputStream(
client.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(
client.getOutputStream());

System.out.println("Connected client: "
+ client.getRemoteSocketAddress());
server.launchNewThread();

Object input;
while (!client.isClosed()) {
input = in.readObject();

if (input != null) {
if (input.toString().equals("server")) {
out.writeObject(server);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});

当我调用 out.writeObject(server) 时,我收到此异常:

java.io.NotSerializableException: java.net.Socket

这是服务器类:

public class Server implements Serializable {
private static final long serialVersionUID = 4634111951586948020L;

public ServerArgs args;

public ArrayList<Socket> clients = new ArrayList<Socket>();
public ServerSocket serverSocket;

public Server(int port) throws IOException {
serverSocket = new ServerSocket(port);

launchNewThread();
}

public void launchNewThread() {
ConnectionThread thread = new ConnectionThread(this);
thread.start();
}

public static void main(String[] args) throws IOException {
new Server(27015);
}
}

最佳答案

public ArrayList<Socket> clients = new ArrayList<Socket>();
public ServerSocket serverSocket;

那里有很多不可序列化的套接字。目前还不清楚“发送服务器”的目的是什么,但也许您应该只发送 ServerArgs 或标记这两个字段 transient

关于Java "NotSerializableException: java.net.Socket"不发送套接字时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com