目前,我有工作,功能正常的代码在我编写的两个程序之间传递消息。这是我正在使用的方案:
a_tx_socket - >发送数据127.0.0.1,端口A
a_rx_socket - >接收数据127.0.0.1,端口B
b_tx_socket - >在127.0.0.1,端口B上发送数据
b_rx_socket - >接收数据127.0.0.1,端口A
请注意,我在接收数据的套接字(a_rx_socket和b_rx_socket)上调用bind()。每个套接字都是通过调用socket()系统调用创建的。
现在,对于我的问题......有没有办法摆脱一个端口?即只能使用一个端口在环回地址上发送/接收?我如何确保程序A / B不接收它发送的数据?这是值得探索的任何原因(性能/可维护性/乐趣/等)?
答案 0 :(得分:2)
一次只能有一个进程绑定到给定的套接字地址。后续尝试绑定将获得EADDRINUSE,这意味着该地址已被使用。
对于ip地址,套接字地址由端口和IP地址组成。有关详细信息,请参阅“man 7 ip”。
因此,您需要两个端口,因为否则只有两个程序中的一个能够绑定(因此接收数据包)。
如果你的程序对总是在同一台机器上,你可能想要使用unix域套接字,因为它们对那个用例更有效。