如何在单个客户端的UDP套接字上同时接收和发送数据
How to recv and send data on UDP socket on single client simultaneously
我必须在udp上实现selectiveRepeat机制,就像在TCP中一样。因此,在这方面,我将把我的窗口发送到客户端,同时也将期待发送数据的确认。。。我正在尝试这样做,如下所示。。。但在这个代码中,它发送数据,但没有收到任何ack。。。。。。。有人能帮助吗
`fd_set rfds;
fd_set wfds;
FD_ZERO(&rfds);
FD_ZERO(&wfds);
struct timeval timeout;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
FD_SET(socket, &rfds);
FD_SET(socket, &wfds);
while( FBS < LBS )
{
int result = select(socket+1, &rfds, &wfds, NULL, &timeout);
if(FD_ISSET(socket, &rfds))
{
Recieve();
}
if(FD_ISSET(socket, &wfds))
{
Send( "Some data");
}
FBS++;
}`
fd_set rfds;
fd_set wfds;
FD_ZERO(&rfds);
FD_ZERO(&wfds);
struct timeval timeout;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
FD_SET(socket, &rfds);
FD_SET(socket, &wfds);
while( FBS < LBS )
{
int result = select(socket+1, &rfds, &wfds, NULL, &timeout);
if(FD_ISSET(socket, &rfds))
{
Recieve();
FD_SET(socket, &wfds); //set socket wirtable
}
if(FD_ISSET(socket, &wfds))
{
Send( "Some data");
FD_CLR(socket, &wfds); // reset socket writable
}
FBS++;
更新:
在发送数据FD_CLR(socket,&wfd)之后,您需要从wfd中移除socket。因为当您在wfd中添加套接字并使用select进行轮询时,select将始终发现该套接字是可写的,并将无限发送数据,直到套接字关闭。如果有数据可供发送,则必须将其设置为仅可写。在上面的场景中,首先将其设置为可写,然后发送数据并将其从wfd中删除,然后继续等待ACK
相关文章:
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 如何使用C++中可以具有多种数据类型的单个变量
- 用于对项目进行分组并将单个项目映射到其他组成员的数据结构
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 如何在 C++ 中使用删除运算符删除单个数据
- 结构内具有更多数据类型的单个链表
- 字符串中单个字符作为数组的数据类型是什么
- 多个快速读取器 单个慢速写入器:使用具有原子索引的阴影数据安全吗?
- 写入单个大数据文件或多个小文件:哪个更快?
- 模板参数在具有相同数据类型的单个类型名的构造函数中不起作用
- CPP中的单个参考代表两种或多个数据类型
- 是否有一种方法可以从文本文件中读取并将单个数据存储为不同的变量
- spdlog 记录单个wchar_t字符串,其中包含包含 {..} 的数据
- 为什么初始化列表会导致2个数据副本,而不仅仅是单个副本将其传递给函数
- 哪个更快,单个对象数组或多个数据属性数组
- C 数据结构代表单个继承
- 为什么为结构的多个数据成员而不是单个成员添加填充