C++ UDP RecvFrom, SendTo Different Sockets
C++ UDP RecvFrom, SendTo Different Sockets
我按照以下方案编写了一个多线程UDP服务器:
方案: 1 个接收器螺纹 (多个工作线程,每个都有自己的套接字,而不是绑定,只是创建了 IPv4、UDP、数据报) 消息被推送到 1 个工作线程,然后继续它,然后发送带有自己的套接字的 ansare 。
问题: 这在我自己的所有测试程序上都可以完美运行,但由于某种奇怪的原因,它不适用于我模拟服务器的旧软件。该软件使用异步 Wsa(重叠),但我仍然不明白为什么它不起作用。
混乱: 如果我使用与在服务器端接收数据相同的套接字进行发送,则可以正常工作。我不明白为什么,udp 是一种无连接协议,那么它如何检测不同的套接字?
混淆:如果我使用与我相同的套接字进行发送,它会起作用 在服务器端接收数据。我不明白为什么,udp 是一个 无连接协议 那么它如何检测不同的套接字呢?
如果您查看要发送的数据包的 UDP 标头,您会注意到它们包含一个"UDP 源端口"字段。 数据包的接收方可以检查该字段(通过 recvfrom()),以找出发送 UDP 套接字在发送计算机上使用的 UDP 端口(请注意,这与确定数据包应传递到接收计算机上哪个端口的"UDP 目标端口"字段不同)。 在您的情况下,您正在与之通信的程序可能正在查看该字段并根据该字段的值调整其行为。
如果您想知道如果您从未在发送 UDP 套接字上调用 bind(),该字段将设置为什么,答案是操作系统将选择要从中发送的可用 UDP 端口号(本质上是一个隐式 bind())。
相关文章:
- different between int **arr =new int [ n]; and int a[i][j]?
- Rcpp 'candidate function has different number of parameters (expected 0 but has 1)'
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- 如何修复c ++中的错误"vector iterators in range are from different containers"?
- C++ UDP RecvFrom, SendTo Different Sockets
- 尝试实施 PIMPL idom 时如何避免"redefinition; different basic types"
- QThread 中的 QTcpSocket 将提交事务,但当 Write 被调用时"Cannot create children for a parent that is in a different
- Typedef redefinition with different types (Emscripten SDL2+O
- C++错误"redefinition of 'string' as different kind of symbol"
- 为什么我会收到这个'redeclared as different kind of symbol'错误?
- "Typedef redefinition with different types" Clang中关于工作MSVC代码的错误
- C++int via socket send():Linux/MacOS上TCP包中的different值
- 具有std::string、cout、of stream和sockets的字符集
- 发布模式下的正则表达式提升库链接在使用 mingw-w64 工具链时警告"duplicate section has different size"
- 有谁知道任何尝试在C / C++中使用libevent实现Web Sockets API
- System.Net.Sockets send vs stdcall:send
- OpenGL ES Matrix/Vector-Transform different than on desktiop
- C++ 异步套接字(System.Net.Sockets.Socket.BeginAccept)与WinSock2.h
- 通过以下方式导入架构 <import> - "Imported schema has different targetNameSpace..."
- "...redeclared as different kind of symbol" ?