recv接收遇到\0后,\0后的字符无法接收

qqkor9 2013-03-28 11:55:45
我用客户端发送BYTE buf[5] = {0x31, 0x32, 0x00, 0x32, 0x31}的内容,send函数返回5,证明是发送成功的,服务端收到后原样返回,客户端用recv接收,结果recv函数只返回3,查看内存,\0后的内容没收到,怎么解决
...全文
544 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqkor9 2013-06-03
  • 打赏
  • 举报
回复
是我服务端的程序搞错了,在服务端‘\0’没做处理,跟socket无关
ok1234567 2013-03-31
  • 打赏
  • 举报
回复
原样返回(回传)的长度错误,检查是否真的当做字符串处理了?
Squall_zy 2013-03-30
  • 打赏
  • 举报
回复
应该是程序问题。 你把“服务器收到后原样返回”的代码贴出来,就知道你的问题所在了。
  • 打赏
  • 举报
回复
你这个现象能重现么? 不要看内存,接收的数据能否进内存(也就是你的字符数组缓冲区)完全取决于你怎么处理 如果是偶发的话,那你就要做个判断 这个判断在循环里做,比如是一个OnRecive()函数 while( lastLen != curLen ) { lastLen = curLen ; curLen = GetDataLength(); ..... // Do whatever you like here } 这里写的是伪代码,你自己实现下
luawkk 2013-03-30
  • 打赏
  • 举报
回复
recv 和 send 一样 要内存拷贝才行 memcpy
菜牛 2013-03-30
  • 打赏
  • 举报
回复
贴代码贴代码
西山小月 2013-03-29
  • 打赏
  • 举报
回复
是循环接收的吗? 应该和\0没关系的,是发送的时候被分成了两个包发,而你只接收了一个包,后面可能还有个包,内容是后两个字节。
youngwolf 2013-03-29
  • 打赏
  • 举报
回复
这个明显是你的程序的问题,你觉得呢?所以你是不是直接贴出你的代码。 socket对消息内容是不感兴趣的。
lxl843 2013-03-29
  • 打赏
  • 举报
回复
引用 3 楼 liangbina07 的回复:
楼上说的极是,socket对消息的内容不敏感,明显是你用的char * pbuffer 接受字符后 在内存中查看遇到结束符就没了 。
liangbina07 2013-03-29
  • 打赏
  • 举报
回复
楼上说的极是,socket对消息的内容不敏感,明显是你用的char * pbuffer 接受字符后 在内存中查看遇到结束符就没了 。

18,360

社区成员

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

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