我正在试图弄清楚如何创建一个java程序,它可以监听多个端口,并根据客户端与哪个端口通信来执行不同的操作。
我已经看到并理解了基本的客户机-服务器程序:http://systembash.com/content/a-simple-java-tcp-server-and-tcp-client/
只是重申一下,我希望创建相同的关系,但不是服务器只侦听一个端口,并在接收输入时执行一个操作,我希望它侦听多个端口,并根据客户端连接和发送数据的端口执行不同的操作。
我希望将来每个端口都能接受GET和PUT命令,但现在我只是想弄清楚如何设置能够监听多个端口的服务器的基本结构。我试着用谷歌搜索,但我似乎找不到太多,所以任何帮助我都很感激。
提前谢谢。-Anthony
发布于 2011-02-17 04:34:54
一个套接字只能打开到一个特定的端口,因此您需要多个服务器套接字(例如,每个端口一个套接字)。我认为每个套接字还需要一个线程,以便一个套接字上的网络活动不会干扰其他套接字上的活动。
您是否将服务器作为一种学术练习来实现?如果没有,我真的会真的强烈建议使用一个预先存在的服务器,如Tomcat。
发布于 2011-02-17 04:36:03
你提到的教程非常基础。在不使用线程的情况下,您无法编写任何合理的服务器。为了拥有两个服务器套接字,您必须为每个端口生成一个新线程,如下所示(伪代码):
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();有了client1和client2套接字,你就可以分别处理它们了。此外,处理客户端连接应该在不同的线程中完成,以便您可以为多个客户端提供服务。当然,这段代码引入了很多重复,但请考虑以此为起点。
总结一下--如果你的目标是实现HTTP GET和PUT,那就使用servlet,远离这一切。
发布于 2011-02-17 04:34:40
当然,您可以只打开多个服务器套接字。
您可能还想看看jboss netty,它可以帮助您实现协议。
https://stackoverflow.com/questions/5021725
复制相似问题