nad*_*div 262 sockets port udp tcp communication
同一台机器上的两个应用程序可以绑定到同一个端口和IP地址吗?更进一步,一个应用程序可以收听来自某个IP和另一个远程IP的请求吗?我知道我可以有一个应用程序从两个线程(或叉子)开始有类似的行为,但两个没有任何共同点的应用程序可以做同样的事情吗?
Chr*_*ail 235
对于TCP,没有.一次只能有一个应用程序在同一端口上进行侦听.现在,如果你有2个网卡,你可以让一个应用程序在第一个IP上侦听,第二个在第二个IP上使用相同的端口号.
对于UDP(多播),多个应用程序可以订阅同一端口.
小智 117
是(对于TCP),如果程序设计为可以,则可以在同一个套接字上侦听两个程序.当套接字由第一个程序创建时,请确保SO_REUSEADDR在您之前在套接字上设置该选项bind().但是,这可能不是你想要的.这样做的是传入的TCP连接将被定向到其中一个程序,而不是两个,因此它不会复制连接,它只允许两个程序为传入的请求提供服务.例如,Web服务器将有多个进程都在端口80上进行侦听,并且O/S会向准备接受新连接的进程发送新连接.
SO_REUSEADDR
Run Code Online (Sandbox Code Playgroud)
允许其他套接字bind()到此端口,除非已有绑定到端口的活动侦听套接字.这使您可以在崩溃后尝试重新启动服务器时绕过那些"已在使用中的地址"错误消息.
Jav*_*ier 47
原则上,没有.
它不是一成不变的; 但它是所有API编写的方式:应用程序打开一个端口,获取它的句柄,当客户端连接(或UDP情况下的数据包)到达时,操作系统通知它(通过该句柄).
如果操作系统允许两个应用程序打开同一个端口,它将如何知道要通知哪个?
但是......有很多方法可以解决它:
use*_*421 46
是.
多个侦听TCP套接字都可以共存,只要它们都绑定到不同的本地IP地址,它们都可以共存.客户可以连接到他们需要的任何一个.这不包括0.0.0.0(INADDR_ANY).
多个接受的套接字可以共存,所有套接字都可以从同一个侦听套接字接收,所有套接字都显示与侦听套接字相同的本地端口号.
所有绑定到同一端口的多个UDP套接字都可以共存,提供与(1)相同的条件,或者它们都SO_REUSEADDR在绑定之前设置了选项.
TCP端口和UDP端口占用不同的命名空间,因此使用TCP端口并不排除它用于UDP,反之亦然.
参考:Stevens&Wright,TCP/IP Illustrated,第二卷.
piy*_*ush 25
是肯定的.据我记得从内核版本3.9(不确定版本)开始支持SO_REUSEPORT.SO_RESUEPORT允许绑定到完全相同的端口和地址,只要第一个服务器在绑定其套接字之前设置此选项.
它适用于TCP和UDP.有关更多详细信息,请参阅链接:SO_REUSEPORT
注意:根据我的观点,接受的答案不再适用.
Jed*_*ith 18
不可以.一次只能有一个应用程序绑定到端口,并且强制绑定时的行为是不确定的.
使用多播套接字 - 听起来不像您想要的那样 - 只要在每个套接字的选项中设置了SO_REUSEADDR,多个应用程序就可以绑定到端口.
您可以通过编写一个"主"进程来完成此操作,该进程接受并处理所有连接,然后将它们交给需要在同一端口上侦听的两个应用程序.这是Web服务器等采取的方法,因为许多进程需要监听80.
除此之外,我们进入细节 - 你标记了TCP和UDP,它是什么?还有什么平台?
您可以让一个应用程序侦听一个网络接口的一个端口。因此你可以:
httpd监听远程访问接口,例如192.168.1.1:80127.0.0.1:80示例用例可以用作httpd负载均衡器或代理。
| 归档时间: |
|
| 查看次数: |
262113 次 |
| 最近记录: |