如果我想在一台PC上使用(UDP)套接字作为进程间通信机制,由于两个端点具有相同的IP地址,我可以设置什么限制?
我想,为了让两个进程A
和B
都监听同一个IP /端口地址,SO_REUSADDR
是必要的 - 对吗?即使这可能在概念上允许单个套接字上的全双工通信,但如果我尝试使用全双工,还有其他问题:
我确信有一个可行的解决方案,每端使用两个套接字(一个用于A -> B
数据,一个用于B ->A
数据)...但是有一个可行的解决方案使用每端都有一个插座?如果可能的话,每个进程使用一个全双工套接字会有明显的优势吗?
答案 0 :(得分:0)
这个问题来自误解。这种误解源于读取具有不同值的receivePort
和sendPort
等变量名称,并将它们读取为具有到本地端口的隐式链接。这可能会使一个人(错误地)相信正在使用两个插座,或者必须使用 - 一个用于发送,一个用于接收。这是错误的 - 只需要一个插槽(在每一端)。
如果使用变量来引用单个主机上的端口,最好将它们命名为明确表示一个是local
或者与#34;这个"进程,另一个是remote
或peer
,并且属于不同进程的地址,尽管它位于同一本地主机上。然后应该更清楚的是,像任何套接字一样,它完全可能支持单个端口号的单个套接字的发送和接收。
在这种情况下(同一主机上的进程间通信必然使用每端单个套接字的不同端口号)所有其他问题(SO_REUSEADDR
,TCP
vs UDP
因接受误解而引起的注意力分散。