在套接字编程中,一些数据被发送到服务器,一旦服务器收到它就会发送确认响应消息。它超过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);
答案 0 :(得分:2)
您应该在Windows上禁用Nagle算法,否则套接字将保留在您的数据上,直到缓冲区已满(或者至少在发送之前等待几百毫秒)。
您可以通过设置TCP_NODELAY套接字选项来执行此操作:
int flag = 1;
int result = setsockopt(m_Socket,IPPROTO_TCP,TCP_NODELAY,(char *) &flag,sizeof(int));