繁体   English   中英

如何在单个客户端上的UDP套接字上同时接收和发送数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM