wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Windows TCP套接字recv延迟大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

外部控制器每30ms通过TCP / IP套接字发送120字节的消息. 应用程序通过标准的tcp / ip socket recv函数接收此消息. 它在 Linux& OSX(recv每30ms返回120个字节的消息). 在Windows下,recv大约每1秒返回~3500字节缓冲区.其余时间它返回0. Windows下的Wireshark显示每隔30ms就会发送一次消息. 如何让windows t
外部控制器每30ms通过TCP / IP套接字发送120字节的消息.
应用程序通过标准的tcp / ip socket recv函数接收此消息.
它在 Linux& OSX(recv每30ms返回120个字节的消息).
在Windows下,recv大约每1秒返回~3500字节缓冲区.其余时间它返回0.
Windows下的Wireshark显示每隔30ms就会发送一次消息.

@H_502_12@

如何让windows tcp socket正常工作(没有延迟)?@H_502_12@

PS:我玩过TCP_NODELAY& TcpAckFrequency已经. Wireshark显示一切正常.所以我认为这是一些Windows优化,应该关闭.@H_502_12@

读 – @H_502_12@

@H_502_12@

int WMaster::DataRead(void)
{
if (!open_ok)  return 0;
if (!checkSocket())
{
    PrintErrNo();
    return 0;
}
iResult = recv(ConnectSocket,(char *)inpuT_Buff,sizeof(inpuT_Buff),0);

nError=WSAGetLastError();
if(nError==0) return iResult;
if(nError==WSAEWOULDBLOCK) return iResult;

PrintErrNo();
return 0;
}

初始化-@H_502_12@

@H_502_12@

ConnectSocket = INVALID_SOCKET;

iResult = WSAStartup(MAKEWORD(2,2),&wsaData);
ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCp);
ZeroMemory(&clientservice,sizeof(clientservicE));
clientservice.sin_family = AF_INET;
clientservice.sin_addr.s_addr = inet_addr( deviceName.tolatin1().constData() );
clientservice.sin_port = htons( port);

iResult = setsockopt(ConnectSocket,IPPROTO_TCP,TCP_NODELAY,(char *) &flag,sizeof (int));

u_long iMode=1;
iResult=ioctlsocket(ConnectSocket,FIONBIO,&iModE);

iResult = ::connect( ConnectSocket,(SOCKADDR*) &clientservice,sizeof(clientservicE) );

checkSocket – @H_502_12@

@H_502_12@

bool WMaster::checkSocket(void)
{
socklen_t len = sizeof (int);
int retval = getsockopt (ConnectSocket,SOL_SOCKET,SO_ERROR,(char*)(&valopt),&len );
if (retval!=0)
{
   open_ok=false;
   return false;
};
return true;
}
@H_772_39@解决方法
虑禁用Nagle算法. 120字节非常小,可能在发送之前缓冲数据.我认为是Nagle算法的另一个原因是大约33次发送应该在1秒内发生.这相当于33 * 120 = 3960字节/秒非常类似于您所看到的3500.

大佬总结

以上是大佬教程为你收集整理的Windows TCP套接字recv延迟全部内容,希望文章能够帮你解决Windows TCP套接字recv延迟所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。