使用 UDP 进行端口到端口数据传输
Port to Port data transfer with UDP
我正在从事这个项目,其中指定了源端口和目标端口,以便通过 UDP 套接字发送消息 C++.我已经让项目的 TCP 部分工作正常,但我不明白在设置时如何指定源端口和目标端口。
我知道怎么做的方法是"接收器"设置一个 recvfrom() 调用,"发送者"也将在 sendto() 命令中使用的端口......但它必须是同一个端口。
那么,鉴于我需要"接收器"上的端口 x 与"发送方"上的端口 y 通信,我将如何做到这一点?
谢谢
发送方调用bind
时定义源端口。例如:
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) { /*error*/}
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(source_port); // here
int res = bind(sockfd,(struct sockaddr*)&sin, sizeof(sin));
if (res < 0) { /*error*/}
目标端口进入传递给sendto
的sockaddr
参数
如果这是一对一映射,即一个源与一个目标通信,那么只需bind(2)
本地端口并connect(2)
到远程 IP 和端口(与常见的误解相反,您可以连接 UDP 套接字)。在两端都这样做(当然使用适当的远程和本地 IP/端口),现在您只需使用recv(2)
和send(2)
而无需显式寻址。
如果一端需要等待另一端发送第一个数据包,则提取使用 recvfrom(2)
接收的源地址/端口,然后connect(2)
到它。
另一方面,如果一端充当多客户端服务器,则在客户端上执行相同的bind(2)
/connect(2)
跳舞,但仅对本地端口进行bind(2)
,然后在服务器上使用recvfrom(2)
/sendto(2)
。
如果需要同时双工通信,则应在阻塞模式下使用套接字 -- fcntl(...O_NONBLOCK...)
,并使用select()
来确定套接字是可写还是可读,或者两者兼而有之。这里有一个关于如何做到这一点的很好的例子 http://www.lowtek.com/sockets/select.html
- 如何通过ROS将realsense数据传输到其他设备
- C++中从客户端到服务器的数据传输问题
- 需要优化串行数据传输
- QTCPSOCTED数据传输在读取缓冲区已满时停止,并且在释放时不会恢复
- 分段错误:C++中的结构序列化和 MPI 数据传输
- 插座 - 数据传输后保持插座打开
- 如何避免通过TCP/IP SSH隧道在数据传输中重复读取数据
- 与GPS的串行通信-连续数据传输
- 使用 UDP 进行端口到端口数据传输
- 将 cv::Mat 存储在字节数组中,以便将数据传输到服务器
- 如何使用visual studio c++与ZIGBEE进行数据传输
- 如何将数据传输到另一个线程并使helgrind知道它
- c++模块之间的数据传输
- 如何修复OpenSSL不正确的数据传输
- vector 将 CSV 列数据添加到向量行中,同时将 CSV 文件的数据传输到 C++ 向量
- 使用C++测量网络上 2 个应用程序之间的数据传输速率(带宽),如何获得公正准确的结果
- 如何加快从内存到 CPU 的数据传输
- Qt 4.7:TCP线程,数据传输导致内存泄漏
- 使用蓝牙将陀螺仪数据传输到另一台计算机
- 流式传输udp数据到队列