【问题标题】:Communicating between one ServerSocket and several Sockets一个 ServerSocket 和多个 Socket 之间的通信
【发布时间】:2012-09-13 22:05:15
【问题描述】:

我试图让我的 ServerSocket 与多个套接字通信,但我不知道如何,到目前为止,我意识到调用 serverSocket.accept() 将返回一个套接字以在服务器和第一个套接字之间进行通信,但是当second and on 正在尝试连接到 ServerSocket,它让他们连接,但没有获得新的套接字与他们通信,那么,我如何与第二个 Socket 和 on 通信?

【问题讨论】:

    标签: java sockets networking


    【解决方案1】:

    简单地说,如果您想同时与两个套接字通信,则需要生成一个新线程。

    ServerSocket ss = new ServerSocket(... params ...);
    while(isRunning) {
        Socket socket = ss.accept();
        Runnable r = new SocketHandler(socket); // write the socket handler class
        Thread t = new Thread(r);
        t.start();
    } 
    

    现在显然您可以对此进行很多很多改进。最明显的是保留 r 和/或 t 的引用,以便您可以更好/更严格地控​​制它们,并能够随意阻止它们。但这些功能远远超出了这个问题的范围。

    【讨论】:

    • 好吧,所有的接受都可以在你的服务器线程上完成。您只需要将ss.accept() 生成的套接字传递给您的处理程序线程。
    • 所以假设性地连续调用 accept() 会不断返回不同的套接字来完成与不同设备的通信?
    • 没错——每次调用ss.accept() 都会产生一个不同的套接字。调用将阻塞,直到有新的套接字可用。它永远不会返回同一个套接字两次。
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2019-09-24
    • 1970-01-01
    • 2021-04-05
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多