socket 网络接收数据问题(0X00问题)

在用vc++6.0中做网络通讯时,用 recv(  SOCKET s,  char* buf,  int len,  int flags);

发现接收到的数据会 把00截取掉,如服务端发送十六进制的“30 31 32 33 00 34 35”,这边接收到的数据只有“30 31 32 33 ”这个了,不知道什么原因,请教高手!


========================================================================

抓包看一下协议是否完整,如果完整就从recv的buf等找原因;如果不完整,则从另一端的send找原因。

从send找原因吧,应该是调用send的时候,传入了错误的数据长度导致的。

发送的时候,用了strlen()吧。这个遇到00就会停止继续读取字符串。


你看一下send的返回值,再看一下recv的返回值,比较一下两者是否相等,这有socket例子,你找一个试试:
http://download.csdn.net/detail/geoff08zhang/4571358


明显是字符串传输的时候遇到0了,自动截断。。3楼应该正确的


发送应该没问题,我用测试工具发送的,测试工具接收都正常,有socket接收就会自动把00截断!


char * buf;
int bytesRead = recv(s, buf, bufSize, 0);
我这样接收的是不是有问题,buf自动把00后的截取掉了!


recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);

printf显示字符串当然是到0x00结束了。


strlen也是已0x00结束的;



详解:

http://bbs.csdn.net/topics/390467376?page=1#post-394578224

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值