服务器和客户端在同一台机器上没有环回

时间:2011-09-20 08:11:24

标签: c++ linux networking loopback

我在同一台机器(linux)上运行服务器和客户端。 如何强制数据包通过网络(交换机)而不是通过环回?

谢谢,

迈克尔

4 个答案:

答案 0 :(得分:3)

由于您在编程网站上询问此问题,我假设您有源代码。

创建客户端套接字时,可以将其限制为特定接口。通常你不这样做(你只需先调用connect()而不先bind()),然后让操作系统找出最好的传出界面,但这不是强制性的。

答案 1 :(得分:2)

您可以尝试在客户端和服务器套接字上设置SO_BINDTODEVICE套接字选项,并将其作为参数提供外部NIC接口。

请参阅:http://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.html以获取示例

我不确定这是否足够 - 在内核IP堆栈中可能会进行健全检查以丢弃其以太网目标和源都是您的数据包。可能有一个sysctl来禁用此检查,或者您可以编译自己的内核而不检查此特定测试。

答案 2 :(得分:0)

也许您应该尝试通过代理服务器进行连接?

答案 3 :(得分:0)

你不能,除非你在网络上有一些设备,他们的工作就是把数据发回给你。通常,没有什么可以做到的。如果您将数据发送到网络上,则无法将其恢复。

如果您已设置了一些内容以便将数据返回给您,请按照它支持的任何机制将数据发送到该数据。