两个应用程序可以听同一个端口吗?

同一台计算机上的两个应用程序可以绑定到相同的端口和IP地址吗? 更进一步,一个应用程序可以监听来自某个IP的请求,另一个可以监听另一个远程IP的请求吗? 我知道我可以有一个应用程序以两个线程(或叉子)开始具有相似的行为,但两个没有任何共同点的应用程序可以执行相同的操作吗?


对于TCP,没有。 一次只能有一个应用程序在同一端口上侦听。 现在,如果您有两块网卡,则可以让一个应用程序使用相同的端口号侦听第一个IP和第二个IP上的第二个IP。

对于UDP(多播),多个应用程序可以订阅相同的端口。


是的(对于TCP),如果程序设计为这样,则可以让两个程序在同一个套接字上侦听。 当套接字由第一个程序创建时,请确保在bind()之前在套接字上设置了SO_REUSEADDR选项。 但是,这可能不是你想要的。 这是一个传入的TCP连接将被引导到其中一个程序,而不是两个,所以它不会重复连接,它只是允许两个程序来处理传入的请求。 例如,Web服务器将有多个进程在端口80上侦听,并且O / S向准备好接受新连接的进程发送新连接。

SO_REUSEADDR

允许其他套接字bind()到此端口,除非已经有一个活动的监听套接字绑定到端口。 当您尝试在崩溃后重新启动服务器时,可以避开那些“地址已被使用”错误消息。


原则上,不。

它不是写在石头上的; 但所有API都是这样编写的:应用程序打开一个端口,获取一个端口,当客户端连接(或UDP中的一个包)到达时,操作系统会通知它(通过该句柄)。

如果操作系统允许两个应用程序打开同一个端口,它将如何知道要通知哪一个?

但是......有办法解决这个问题:

  • 正如Jed指出的那样,您可以编写一个“主”进程,这是唯一真正监听端口并通知其他人的进程,使用任何逻辑来分隔客户端请求。
  • 在Linux和BSD上(至少),你可以设置'重新映射'规则,根据任何网络相关标准(可能是来源网络或某些网络相关的标准)将数据包从'可见'端口重定向到不同的简单的负载平衡形式)。
  • 链接地址: http://www.djcxy.com/p/30289.html

    上一篇: Can two applications listen to the same port?

    下一篇: Ignoring directories in Git repos on Windows