2011-02-16 177 views
4

我想弄清楚如何创建一个Java程序,可以侦听多个端口并根据客户端所说的端口执行不同的操作。服务器侦听多个端口[Java]

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

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

我希望将来每个端口都接受GET和PUT命令,但现在我只想弄清楚如何设置服务器的基本结构,以便能够听取多个端口。我尝试了谷歌搜索,但我似乎无法找到太多,所以任何帮助表示赞赏。

在此先感谢。 -Anthony

回答

2

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

您是否正在实施服务器作为学术练习?如果没有,我真的真的真的真的强烈建议使用已有的服务器,如Tomcat

0

你当然可以打开多个服务器套接字。

你可能也想看看可以帮助你实现协议的jboss netty。

6

你提到的教程是非常基本的。不能使用线程编写任何合理的服务器。为了有两个服务器插槽,您必须生成一个新的线程为每个端口,像这样的(伪):

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并摆脱所有这些喧嚣。

+0

请注意,该代码将只接受每个端口一个连接。在此之后的某个随机时间,相关的ServerSocket将被垃圾收集并关闭。这通常不是编写TCP服务器的正确方法。 – EJP 2011-02-17 00:45:33