目前,我有工作正常的代码,可以在我编写的两个程序之间传递消息。这是我正在使用的方案:
程序A
a_tx_socket -> 在 127.0.0.1,端口 A 上发送数据
a_rx_socket -> 在 127.0.0.1,端口 B 上接收数据
计划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 不接收它发送的数据?这是否值得出于任何原因(性能/可维护性/乐趣/等)进行探索?
最佳答案
一次只有一个进程可以绑定(bind)到给定的套接字地址。随后的绑定(bind)尝试将获得 EADDRINUSE,这意味着该地址已在使用中。
对于ip地址,套接字地址由端口和IP地址组成。请参见“man 7 ip” ' 了解详情。
因此,您需要两个端口,否则您的两个程序中只有一个能够绑定(bind)(并因此接收数据包)。
如果您的两个程序总是在同一台机器上,您可能希望改用 unix 域套接字,因为它们对于该用例而言效率更高。
关于c - 用于 IPC 的 Linux 环回 UDP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178330/