单套接字通过 WLAN 和 ETH 接口发送和接收
Single socket sends and receives over both wlan and eth interface
使用C++我创建了一个UDP套接字,同时提供IPv4地址和端口。我在 Ubuntu 上运行它,并启动并运行了 wlan0 和 eth0 接口。显然有些事情决定了应该同时使用这两个接口,我很感激。不过,使用不同的接口发送和接收确实为我创造了一种泡菜(NAT 遍历???)。使用 Wireshark,我可以看到传入的包,但我的应用程序没有注册它们。
澄清一下:
我有一个跟踪器,它将为我提供一个同行。跟踪器还将联系该对等方向我发送消息。为了克服NAT遍历问题,我将发送穿刺消息。现在的问题是穿刺消息是通过 wlan 发送的(我正在使用两台机器在本地测试),而来自对等体的消息是通过 eth 发送的。
因此,我认为最简单的解决方案是简单地使用一个界面。(或两个插座)
编辑:
我将尝试此处提到的指定单个接口的内容。
@Barmar,指出当使用将从中受益的目标地址调用 sendto 时,UDP 套接字可能会更改接口。不过,我仍然对问题的原因感到困惑。有人可以解释为什么这首先是一个问题吗?
编辑2:
上面提到的强制一个接口用于套接字绑定的解决方案不起作用。显然,sendto 方法会选择忽略这一点,如果它觉得它会更好地工作,仍然会选择另一个接口。有谁知道如何确保套接字粘在分配给它的接口上?
如果需要确保 UDP 回复来自请求发送到的同一地址,解决方案是使用多个套接字。为服务器的每个 IP 打开一个套接字(由于接口别名,每个接口可能有多个套接字),并将套接字绑定到该 IP。然后,使用 select()
或 poll()
一次等待所有套接字上的请求。当请求进入特定套接字时,您通过同一套接字发送回复,其源 IP 将与原始数据包的目的地匹配。
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 我可以在具有一个标头和一个接口的 cpp 文件中有多个嵌入吗?
- 类接口,可以创建N个方法
- 类具有相同的接口,但参数的类型不同
- 如何与 Cheerp/js 中的 extern 变量接口?
- 单套接字通过 WLAN 和 ETH 接口发送和接收