我尝试使用程序将套接字绑定到80端口时出现错误,但是两个浏览器如何同时监听同一端口80呢?
我尝试使用程序将套接字绑定到80端口时出现错误,但是两个浏览器如何同时监听同一端口80呢?
浏览器不会监听端口80
,HTTP服务器会(虽然这只是一种约定,你可以轻松地使用端口80
来搭建FTP或telnet服务器)。
在TCP/IP中,“会话”必须是唯一的,而“会话”被定义为5元组(协议,源IP,源端口,目标IP,目标端口)
。这允许数据包在互联网上正确路由。
通常,当客户端尝试联系服务器时,它将其源端口指定为0
,这意味着操作系统将分配一个未使用的端口。这意味着客户端实际上将监听该端口,而不是端口80
。
因此,当您的浏览器访问Microsoft的网页时,您可能会获得以下属性的会话:(TCP,mybox.com,1101,www.microsoft.com,80)
。
如果您发现无法将服务器绑定到端口80
,则很可能是因为您已经有一个在该端口上运行的服务器,或者您的程序没有必要的特权来绑定该端口(小于1024
的端口通常被视为特权端口)。
运行netstat -a
(在Linux 或 Windows上)将告诉您是否有服务器绑定到端口80
。查找在端口80
上的监听器(如果它正在将端口解析为服务名称,则是http
),类似于:
tcp 0 0 localhost:http *:* LISTEN
(协议,源IP,目标IP,源端口,目标端口)
,但是你给出的例子是(TCP,mybox.com,1101,www.microsoft.com,80)
。难道不应该是(TCP,mybox.com,www.microsoft.com,1101,80)
吗? - Jon McClung如果您的意思是“如何让两个服务器监听端口80”,请考虑使用HTTP Server API。 两个服务器都可以注册一个回调函数,以及一个URL。客户端可以根据URL决定调用哪个服务器。
http://localhost/Service1 会到指定了 "http://localhost/Service1" 作为其URL 的服务。