据我所知,套接字只是数据结构,就像文件一样。这是否意味着为不同的 IP、PORTNUMBER 和 TRANSPORT TYPE (TCP/UDP) 组合创建了不同的套接字 DS?
我想知道下面的实现是否可行
--> 使套接字监听 2 个不同的 IP 但端口号相同,以便当客户端向这些 IP 中的任何一个(但端口号相同)发送数据时,服务器应该能够为其提供服务。 (或者端口号可以与 2 个不同的 IP 相关联)
-->让2个进程监听同一个端口号
最佳答案
Make a Socket listen on 2 different IPs but same port number so that when a client sends data to any of these IPs(but same port number), Server should be able to serve it. (Or can a port number be associated with 2 different IPs)
套接字不能监听 2 个以上的显式 IP 地址。您只能在一个套接字上调用一次 bind()
,并且它不允许您一次指定超过 1 个 IP 地址。但是,您可以bind()
套接字到通配符 IP 地址(INADDR_ANY
用于 IPv4,IN6ADDR_ANY
用于 IPv6),这将允许套接字同时绑定(bind)到所有可用的本地 IP 地址。在这种情况下,您确实可以将数据发送到套接字绑定(bind)到的任何 IP 地址上的同一端口。
Make 2 process listen on same port number
这只有在每个进程绑定(bind)到不同的 IP 地址并且不使用通配符 IP 时才有可能。如果您有多个进程监听同一个 IP 和端口,它们如何知道哪个进程应该处理哪些数据?他们不会,所以操作系统一开始就不允许这样做。
关于linux - Sockets、传输类型、端口号、IP之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773874/