如何解决在为 UDP 通信调用 recvfrom( ) 函数后获取“检测到 *** 缓冲区溢出 ***:终止中止”
每当我在服务器端为 UDP 调用 recvfrom()
函数时,我都会遇到错误:
检测到缓冲区溢出***:已终止中止
这个错误是什么意思?我无法理解。
unsigned int len;
int rv,i;
int tmp;
//char msg[200],command=0;
unsigned short *Fptr;
float Float_Temp;
//make socket blocking
FD_ZERO(&readnbs);
FD_SET(g_iUDP_datalogger_soc,&readnbs);
g_UDP_Blocktimervalue.tv_sec = 0;
g_UDP_Blocktimervalue.tv_usec = UDP_REC_BLOCKTIME;
rv = select(g_iUDP_datalogger_soc + 1,&readnbs,NULL,&g_UDP_Blocktimervalue);
len = sizeof(g_UDP_ClientAddr);
if (rv == 1) {
printf(" \n\n\n\n\n rv=%d\n\n\n\n",rv);
tmp = recvfrom(g_iUDP_datalogger_soc,&tmp,SIZE_UDP_MSG,(struct sockaddr *) &g_UDP_ClientAddr,&len);
解决方法
tmp = recvfrom(g_iUDP_datalogger_soc,[YOUR BUFFER ?],SIZE_UDP_MSG,(struct sockaddr *)...
您正在尝试将接收到的数据缓冲到单个 int
(tmp) 对象中,您也将其用作 recvfrom()
的返回值,甚至不以任何方式检查 -无论是错误还是接收到的数据。
您要求 recvfrom()
将 SIZE_UDP_MSG
个字节读入 tmp
,这是一个 int
。您没有说明 SIZE_UDP_MSG
的定义是什么,但是如果 SIZE_UDP_MSG > sizeof(int)
,您将超出 tmp
边界的字节写入周围的内存,从而破坏内存。那是缓冲区溢出。
也许您打算将字节接收到(注释掉的)msg
缓冲区中?
char msg[SIZE_UDP_MSG];
tmp = recvfrom(...,msg,...);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。