【问题标题】:Linux: TCP socket programming over multiple ethernet ports [closed]Linux:通过多个以太网端口进行 TCP 套接字编程 [关闭]
【发布时间】:2013-06-08 01:10:43
【问题描述】:

我一直在网上搜索,以了解如何使用 C/C++ 在 linux 中编程以利用两个单独的以太网端口(例如 eth0 和 eth1)

我了解如何使用 socket() 和 inet_pton,但这似乎只适用于单个以太网端口。

第一个以太网端口自动映射到 192.168.0.100,第二个是 192.168.0.101

【问题讨论】:

  • 这两个界面你想怎么用?监听连接/发送数据/...
  • 现在,我希望他们都成为客户端,所以基本上连接到“服务器”然后接收数据。
  • 您在寻找 SO_BINDTODEVICE 吗?
  • 可能,SO_BINDTODEVICE 是做什么的? (这是一个学习过程)。举个例子?

标签: c sockets ethernet


【解决方案1】:

两部分答案。

  1. 通常,您不必担心明确使用多个以太网端口。内核会自动处理它。这是它的工作原理。对于传出数据包,内核根据目标 IP 地址通过适当的以太网端口发送数据包。因此,如果网络 10.0.0.0 可以通过 eth0 访问,那么数据包将从那里发出。如果网络 11.0.0.0 可以通过 eth1 访问,那么数据包将从那里发出。内核通过分配给接口的网络掩码、IP 地址和默认网关(连同路由表)来确定网络可达性。
  2. 对于传入的数据包,如果您绑定到任何地址,那么您正在侦听的端口的所有数据包都会传递给您。您还可以选择绑定到特定的 IP 地址,在这种情况下,只有发往该 IP 地址和端口的数据包才会发送给您。

【讨论】:

  • 有趣!可以举一个小代码sn-p作为例子吗? (我最了解使用示例)它不必很复杂,只是一个一般要点。
  • 嗯,发送目标地址是您在连接 (TCP) 或发送 (UDP) 中指定的地址。内核路由基于该地址。为了接收您在绑定中指定的地址。 ANY 为 0。请参阅此处的示例 cs.odu.edu/~cs476/fall03/lectures/sockets.htm。网络上还有数百万。只需搜索“套接字示例”。这本书不错amazon.com/UNIX-Network-Programming-Richard-Stevens/dp/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 2011-12-28
相关资源
最近更新 更多