Java 如何一次打开两个服务器插座
我有一个要求,我需要一次打开两个ServerSockets,并连续监听它们各自的套接字 这些单独工作很好,但我需要一起工作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(
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()结束时,旧的套接字实例将被遗忘。