在多个端口上侦听的服务器[Java]

在多个端口上侦听的服务器[Java],java,http,networking,Java,Http,Networking,我试图弄清楚如何创建一个java程序,该程序可以侦听多个端口,并根据客户端与哪个端口通信来执行不同的操作 我已经看过并理解了基本的客户机-服务器程序: 只是重申一下,我希望创建相同的关系,但不是服务器只监听一个端口并在接收输入时执行一个操作,而是希望它监听多个端口并根据客户端连接和发送数据的端口执行不同的操作 我希望将来每个端口都能接受GET和PUT命令,但现在我只是想弄清楚如何设置服务器的基本结构,以便能够侦听多个端口。我尝试过谷歌搜索,但似乎找不到太多,所以非常感谢您的帮助 提前谢谢。 -

我试图弄清楚如何创建一个java程序,该程序可以侦听多个端口,并根据客户端与哪个端口通信来执行不同的操作

我已经看过并理解了基本的客户机-服务器程序:

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

我希望将来每个端口都能接受GET和PUT命令,但现在我只是想弄清楚如何设置服务器的基本结构,以便能够侦听多个端口。我尝试过谷歌搜索,但似乎找不到太多,所以非常感谢您的帮助

提前谢谢。
-Anthony

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


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

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


您是否将实现服务器作为一项学术练习?如果没有,我会非常非常非常非常非常非常非常非常非常非常非常非常非常非常强烈地建议使用一个预先存在的服务器,比如。

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

和(注意不同的端口):

拥有
client1
client2
套接字,您可以分别处理它们。此外,处理客户机连接应该在不同的线程中完成,以便可以为多个客户机提供服务。当然,这段代码引入了大量的重复,但是把这看作是一个起点。
总而言之,如果您的目标是实现HTTP GET和PUT,请使用servlet并远离所有这些麻烦。

请注意,该代码每个端口只接受一个连接。在此之后的某个随机时间,相关的ServerSocket将被垃圾收集并关闭。一般来说,这不是编写TCP服务器的正确方法。我编辑了原始示例代码,使其更全面,但代价是要长得多。谢谢你的评论。
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();