[英]How to recv and send data on UDP socket on single client simultaneously
我必须在udp上实现selectiveRepeat机制,就像在TCP中一样。 因此,在这方面,我将把窗口发送给客户端,同时期望发送数据的确认...我正尝试如下所示...但是在此代码中,它发送数据但未接收到任何确认.......任何人都可以帮助
`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,&wfds)后,需要从wfds中删除套接字。 因为当您在wfds中添加套接字并使用select进行轮询时,select总是会发现该套接字可写,并且将一直无限发送数据,直到套接字关闭为止。 仅当有可发送的数据时,才必须将其设置为可写。 在上述情况下,首先将其设置为可写,然后发送数据并将其从wfds中删除,然后继续等待ACK
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.