【问题标题】:Server Listening on Multiple Ports [Java]服务器侦听多个端口 [Java]
【发布时间】:2011-02-16 20:26:13
【问题描述】:

我正在尝试弄清楚如何创建一个 java 程序,该程序可以监听多个端口并根据客户端所说的端口执行不同的操作。

我已经看过并理解了基本的客户端-服务器程序: http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/

重申一下,我想创建相同的关系,但不是服务器只侦听一个端口并在接收到输入时执行一项操作,而是希望它侦听多个端口并根据客户端连接的端口和发送数据,执行不同的操作。

我希望将来每个端口都接受 GET 和 PUT 命令,但现在我只是想弄清楚如何设置服务器的基本结构,以便能够监听多个港口。我已经尝试使用谷歌搜索,但似乎找不到太多信息,因此感谢您提供任何帮助。

提前致谢。 -安东尼

【问题讨论】:

    标签: java http networking


    【解决方案1】:

    你提到的教程是非常基础的。不使用线程就无法编写任何合理的服务器。为了拥有两个服务器套接字,您必须为每个端口生成一个新线程,如下所示(伪代码):

    new Thread() {
        public void run() {
            ServerSocket server = new ServerSocket(6788);
            while(true) {
                Socket client1 = server.accept();
                //handle client1
            }
        }.start();
    

    和(注意不同的端口):

    new Thread() {
        public void run() {
            ServerSocket server = new ServerSocket(6789);
            while(true) {
                Socket client1 = server.accept();
                //handle client2
            }
        }.start();
    

    拥有client1client2 套接字,您可以分别处理它们。此外,处理客户端连接应该在不同的线程中完成,以便您可以为多个客户端提供服务。当然,这段代码引入了很多重复,但请以此为起点。

    总结一下 - 如果您的目标是实现 HTTP GET 和 PUT,请使用 servlet 并摆脱所有这些麻烦。

    【讨论】:

    • 请注意,该代码每个端口只接受一个连接。在此之后的某个随机时间,相关的 ServerSocket 将被垃圾收集并关闭。一般来说,这不是编写 TCP 服务器的正确方法。
    • 我编辑了原始示例代码,使其更全面,但代价是更长。感谢您的评论。
    【解决方案2】:

    一个套接字只能对特定端口开放,因此您需要多个服务器套接字(例如,每个端口 1 个套接字)。我认为您还需要每个套接字一个线程,以便一个套接字上的网络活动不会干扰其他套接字上的活动。

    您是否将服务器作为学术练习来实现?如果不是,我真的真的真的 真的强烈建议使用预先存在的服务器,例如Tomcat

    【讨论】:

      【解决方案3】:

      当然,您可以只打开多个服务器套接字。

      您可能还想查看 jboss netty,它可以帮助您实现协议。

      【讨论】:

        猜你喜欢
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多