繁体   English   中英

不发送套接字时,Java“ NotSerializableException:java.net.Socket”

[英]Java “NotSerializableException: java.net.Socket” When Not Sending A Socket

因此,我通过以下线程将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

这是Server类:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM