【问题标题】:How can I Open Two ServerSocket at atime如何一次打开两个 ServerSocket
【发布时间】:2014-03-14 17:28:53
【问题描述】:

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

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

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

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

我该怎么做?

【问题讨论】:

    标签: java sockets serversocket


    【解决方案1】:

    您可以从这里参考。你必须使用多线程......

    Listening to two ports simultaneously in Java server using multithreading

    【讨论】:

    • 感谢您的回复。我会检查并通知您。
    • 请看我对 Dmitriy 解决方案的评论。你的解决方案也会给我同样的问题。
    【解决方案2】:

    你考虑过多线程吗?

    首先,我们创建一个实现 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 ();
    

    【讨论】:

    • 会不会出现问题,那就是“r”中的无限Socket对象?
    • 好吧,它不应该,因为套接字处理器是在与接受套接字相同的线程中启动的。因此,在 SocketProcessor.start() 方法结束之前,不会接收到新的 Socket 实例。而当 SocketProcessor.start() 结束时,旧的 Socket 实例就会被遗忘。
    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多