UDP接收缓冲区的一个小问题

vcbear 2001-08-10 04:59:47
以前没有注意的一个小问题:
用recvfrom函数接收数据,缓冲区定义为char Buffer[255];
如果对Buffer初始化为任何非0的值或者不初始化,都可以正常接受。
但是初始化为0,比如:
char Buffer[255]="\0"
或memset(Buffer,0,sizeof(Buffer));
则recvfrom函数收不到东西,堵塞。
????????????
...全文
570 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
azuo_lee 2001-08-11
  • 打赏
  • 举报
回复
1。memset(Buffer,0,sizeof(Buffer));
这句话想初始化Buffer为全0,是很不可靠的,因为sizeof对于非静态数组不一定能返回正确的值。BTW,对于字符串,要取到长度,永远都要使用strlen,千万不能使用sizeof。
2。你的Buffer只有255个字节,你却对Buffer[255]赋值,危险!
3。如果你在recvfrom调用时,也使用了sizeof,那很难保证不出错。
vcbear 2001-08-11
  • 打赏
  • 举报
回复
azuo_lee() 的说法有点误导人。
sizeof是取得Buffer指向的缓冲区的大小,姑且认为你说的sizeof有问题吧,但是
如果如你所说:“对于字符串,要取到长度,永远都要使用strlen”,确实是可以
返回Buffer里所装的字符串长度,但是无法返回整个Buffer的大小。如
Buffer里装的是"test"那么strlen只能返回4,而我想要的是得到整个Buffer的大小。
而char Buffer[255]="\0"则是初始Buffer,一个很平常的C语法,不是对Buffer[255]赋值。
估计你是看错了。
问题我已经找到了,完全是我自己粗心的问题,不在Socket的缓冲上。马上给分,谢谢。
111222 2001-08-11
  • 打赏
  • 举报
回复
unsigned long on=1;
ioctlsocket(SockFD,FIONBIO,&on);//避免阻塞
然后for循环recvfrom,直到接收成功。
jink 2001-08-10
  • 打赏
  • 举报
回复
这个问题道是没碰到过
admireO 2001-08-10
  • 打赏
  • 举报
回复
按理说应该不会出现这种问题吧,Buffer在recvfrom函数里是一个输出参数正如vcbear自己讲的
"缓冲区只是内存区域的一个块定义而已。应该可以往缓冲区里放任何字节流",请问可不可以把代码贴出来,理论上不应该是那个问题.而且我也不明白WhiteCloud(vc音频)讲的,我写程序的时候也有初始化缓冲区的习惯,也没出现过这种问题.
vcbear 2001-08-10
  • 打赏
  • 举报
回复
对,0是字符串的结束符号。但是缓冲区并非一定是字符串,缓冲区只是内存区域的一个块定义而已。应该可以往缓冲区里放任何字节流,对于一个字节来说,应该是0~0xff的取值,所以,缓冲区应该是可以设置为0的。如果我在socket里传输的不是字符串,是一些16进制数据,某一个字节是0,怎么办呢?一定要换码吗?
如果不对缓冲区进行初始,缓冲区里可能是一些不确定非0值,也可能是0值。呵呵,又怎么办呢?
我现在干脆把缓冲区初始为0x20,即空格,一点问题没有。可是为什么不能填充0呢?

请注意过这个问题的朋友指点!!!
wqf2 2001-08-10
  • 打赏
  • 举报
回复
0可是字符串的结束符啊
WhiteCloud 2001-08-10
  • 打赏
  • 举报
回复
我的天。你知道这个0代表了什么含义吗?是0的话,你的缓冲意味着什么呢?反思吧
clack 2001-08-10
  • 打赏
  • 举报
回复
我倒是也没有注意过这个问题,一般都不需要初始化,至于你说的,没遇见过。
vcbear 2001-08-10
  • 打赏
  • 举报
回复
请问中......
vcbear 2001-08-10
  • 打赏
  • 举报
回复
up
jiagh 2001-08-10
  • 打赏
  • 举报
回复
kk
过路的

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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