在套接字编程中,一些数据被发送到服务器,并且服务器一接收到数据就立即发送确认响应消息。它大于1个字节,所以我在接收时检查了一个以上的字节检查,这里我丢失了120-200ms。这是一个很大的问题。由于客户端需要发送确认回执。我已经闻到服务器发送数据的同时,数据已经到达了我的IP。但是recv或ioctlsocket(检查是否可以读取1个以上的字节)需要花费一些时间来读取一个以上的字节。我该如何解决。代码如下。

        DWORD RecvCount = 0;
        char szBuff1[2048];
        bool stop = false;
        while(!stop)
        {
            ioctlsocket(*socket, FIONREAD, &RecvCount);
            if(RecvCount > 1)
                stop = true;
        }
        int Res = recv(*socket, szBuff1, RecvCount,0);

最佳答案

您应该在Windows上禁用Nagle算法,否则套接字将一直驻留在您的数据上,直到缓冲区已满(或者至少要等待几百毫秒才可以发送)。

您可以通过设置TCP_NODELAY套接字选项来做到这一点:

int flag = 1;
int result = setsockopt(m_Socket,IPPROTO_TCP,TCP_NODELAY,(char *) &flag,sizeof(int));

09-06 22:19