求助,UDP通信接收延时问题

seuyx 2010-08-07 10:47:12
问题是这样的。现在要进行上下位机之间的通信,通信是通过UDP实现,上位机MFC界面中显示的更新周期是10ms,接收数据时间间隔是25ms。奇怪的事情发生了,接收到的数据感觉像是经过了一个慢镜头重放,比如下位机发送的指令是10秒内数据从0变到10,结果上位机收到的数据,在界面中显示的情况却是100秒钟才从0缓慢变到10.

请问造成这种现象的原因是什么?还有就是,运行一段时间后会报出TCP/IP堆栈耗尽的错误。

这是我上位机的部分代码
//声明
SOCKET netsocket;
struct sockaddr_in remotehost;//目的远程主机的地址信息
struct sockaddr_in recvhost; //接收时存放远程主机的地址信息
struct sockaddr_in localhost;//本地主机的地址信息

//初始化
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup( wVersionRequested, &wsaData );


if((netsocket=socket(AF_INET,SOCK_DGRAM,0))<0)
{
RtPrintf("socket create error!");
ExitProcess(1);
}

localhost.sin_addr.s_addr=inet_addr("192.0.0.200");
localhost.sin_family=AF_INET;
localhost.sin_port=34567;//2006-03-17 change by 602

remotehost.sin_addr.s_addr=inet_addr("192.0.0.202");
remotehost.sin_family=AF_INET;
remotehost.sin_port=34567;//2006-03-17 change by 602

if((bind((SOCKET)netsocket,(const struct sockaddr*)&localhost,sizeof(localhost)))!=0)
{
RtPrintf("Socket bind error!");
ExitProcess(1);
}

//接收的程序
int addrsize=sizeof(recvhost);
if((recvfrom(netsocket,(char *)RecvData,36,0,(struct sockaddr *)&recvhost,&addrsize))<=0)
{
RtPrintf("Receive error");
}
...全文
1050 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
周药师 2010-08-08
  • 打赏
  • 举报
回复
“上位机MFC界面中显示的更新周期是10ms”
为什么要定时呢?
收到数据就更新 没有数据就不更新 这样不更好
其次定时器用多了会卡的 用线程就不会了
seuyx 2010-08-07
  • 打赏
  • 举报
回复
recvfrom函数是每25ms调用一次。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧