2016-02-25 17 views
0

如果我想在单个PC上使用(UDP)套接字作为进程间通信机制,由于两个端点的限制,我可以设置什么有相同的IP地址?一个或两个用于在单个主机上进行进程间通信的套接字

我想为了有两个进程AB都监听相同的IP /端口地址,SO_REUSADDR将是必要的 - 正确吗?而且即使这可能在概念允许在一个单一的插座全双工通讯科,还有我,如果我尝试去全双工其他问题:

  • 我最终会接受我自己的传输,并有过滤它们出来吗?
  • 我是否会因为使用SO_REUSEADDR而将自己暴露给其他进程将虚假或恶意数据注入到我的套接字中......或者我是否仅使用(无连接)UDP就会面临这种可能性?
  • 如果我选择使用TCP,情况会如何不同(在寻址/安全/限制的意义上)?

我相信,有在每端(一个用于A -> B数据,一个用于B ->A数据),使用两个插座一个可行的解决方案......但有使用单插槽两端各有一个可行的解决方案?如果可能的话,每个进程使用一个全双工套接字是否会有明显的优势?

+0

为什么你想让这两个进程在同一个端口上进行监听? –

+0

为什么我不?这在逻辑上是一个连接......尽管打算使用无连接协议。所以问题是:这是否可能,如果是这样,这是可取的(基于事实而不是意见)? – omatai

+0

这在逻辑上是一个连接,当然。但它在逻辑上也有两个不同的端点。为什么要让事情困难? –

回答

0

问题来自误会。读取变量名称(如receivePortsendPort)具有不同的值并读取它们,就好像它们与本地端的套接字具有隐式链接一样,引起误解。这可能会让一个(错误地)认为有两个套接字正在使用,或者必须使用 - 一个用于发送,一个用于接收。这是错误的 - 只需要一个套接字(每一端)。

如果使用变量来指向端口在单个主机上,优选的是,它们命名,使得很显然,一个是local或与之相关的“这个”的过程,而另一个是remotepeer和涉及所述尽管位于同一台本地主机上,但仍然存在不同进程的地址。然后应该更清楚的是,像任何套接字一样,它完全可能支持单端口号的单套接字发送和接收。

在这种情况下(在同一主机上进程间通信不必使用不同的端口号,在每个端部的单个插座)中的所有其他问题(SO_REUSEADDRTCP VS UDP和接收自己的传输)是从所产生的干扰误解。

相关问题