2011-12-16 75 views
1

如何做一个Web服务器使用同一端口(80)TCP连接成为其客户。对于UDP连接,我知道本身没有连接,所以我们可以让多个客户端将数据包发送到相同的端口。如果我尝试使用我的本地主机上已经使用的端口,我得到BindException。所有请求如何使用相同的端口连接到Web服务器?

一种解决方案我看到该被启动线程为每个连接,但是这难道不是很麻烦为网站像谷歌/雅虎那里在每个服务器中的> 100000连接?

做web服务器采用了这个问题有什么解决办法?

+0

所以你想在同一个端口上有很多的UDP数据包?来自不同的客户? – SuperTron 2011-12-16 21:53:20

+0

没有。这只是与UDP的比较。我的主要问题是关于它如何在TCP连接中完成 – 2011-12-16 22:16:12

回答

2

服务器侦听在一个熟知的端口(80)上,并在请求发送给工作套接字后将请求委托给工作套接字,这样就可以为下一个请求提供服务,你可以编写自己的简单服务器来了解发生了什么事情。前充足的代码。 [1]

[1] http://java.sun.com/developer/technicalArticles/Networking/Webserver/WebServer.java

第一它创建一个服务器套接字;

ServerSocket ss = new ServerSocket(port); 

然后在指定的端口上列表并在接受请求后创建一个新的套接字;

Socket s = ss.accept(); 

如上代码所示,它有一个工人线程池,所以在给定的时刻,你可以控制的要求数量得到由服务器在给定时间提供服务。其他人可能会在队列中等待。

2

时,才会获得一个监听端口,但连接有两个端口,一个在连接的两端。这个零件必须是唯一的。

所以,说你连接到google.com 80端口,那么你的连接将有你的机器上的一些端口,说在google.com 42312和端口80。你可以看到你的连接netstat -a。要获得较短的列表:netstat -an | grep的ESTABLISHED”用于显示所有已建立的连接,而不解决他们的IP地址为名称。