Java 如何一次打开两个服务器插座

Java 如何一次打开两个服务器插座,java,sockets,serversocket,Java,Sockets,Serversocket,我有一个要求,我需要一次打开两个ServerSockets,并连续监听它们各自的套接字 这些单独工作很好,但我需要一起工作 while(true){ Socket socket = serversocket1.accept() new SocketProcessor(socket).start(); } while(true){ Socket socket = serversocket2.accept() new AnotherSocketProcessor(

我有一个要求,我需要一次打开两个ServerSockets,并连续监听它们各自的套接字

这些单独工作很好,但我需要一起工作

while(true){
    Socket socket = serversocket1.accept()
    new SocketProcessor(socket).start(); 
}

while(true){
    Socket socket = serversocket2.accept()
    new AnotherSocketProcessor(socket).start(); 
}

我该怎么办?

< P>你考虑过多线程吗?< /P> 首先,我们创建一个实现Runnable接口的类

class SocketListenerRunnable implements Runnable {
    ServerSocket serverSocket;
    SocketProcessor socketProcessor;

    public void setServerSocket (ServerSocket serverSocket) {
        this.serverSocket = serverSocket;
    }

    public void setSocketProcessor (SocketProcessor socketProcessor) {
        this.socketProcessor = socketProcessor;
    }

    public void run () {
        while (true) {
            Socket socket = serverSocket.accept ();
            socketProcessor (socket).start ();
        }
    }
}
然后我们只在需要的时候使用它

SocketListenerRunnable r1 = new SocketListenerRunnable ();
r1.setServerSocket (serverSocket1);
r1.setSocketProcessor (socketProcessor1);
Thread t1 = new Thread (r1);
t1.start ();

SocketListenerRunnable r2 = new SocketListenerRunnable ();
r2.setServerSocket (serverSocket2);
r2.setSocketProcessor (socketProcessor2);
Thread t2 = new Thread (r2);
t2.start ();

你可以从这里查阅。您必须使用多线程


谢谢您的回复。。我会检查并让你知道。请看我对Dmitry解决方案的评论。你的解决方案也会给我带来同样的问题。会不会产生一个问题,即“r”中的无限套接字对象?嗯,不应该,因为套接字处理器是在接受套接字的相同线程中启动的。因此,在SocketProcessor.start()方法结束之前,不会收到新的套接字实例。当SocketProcessor.start()结束时,旧的套接字实例将被遗忘。