在套接字编程中,向服务器发送一些数据,服务器收到后立即发送确认响应消息。它超过 1 个字节,所以我在接收时检查了超过一个字节的检查,这里我丢失了大约 120-200 毫秒。这是一个非常大的问题。因为客户需要发回确认信息。当服务器发送时,我已经嗅探到数据同时到达我的 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));
关于c++ - ioctlsocket 或 recv 在 windows 套接字编程中需要更多时间来执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312014/