在套接字编程中,一些数据被发送到服务器,并且服务器一接收到数据就立即发送确认响应消息。它大于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));