找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: pengxiqin

求助ACE中ACE_Acceptor下函数peer().recv_n接收不到数据

[复制链接]
 楼主| 发表于 2009-10-28 19:10:49 | 显示全部楼层

回复 #10 wishel 的帖子

谢谢wishel!
找到原因了,int handle_input(ACE_HANDLE)函数里的if ( (byteCount = this->peer().recv_n(data,DATA_SIZE)) == -1)收到数据byteCount = 13,导致 data[byteCount] = 0;数组越界。
为什么当我把这里的DATA_SIZE改成14,byteCount就变成等于0了呢?缓冲区越大,虽然数据没填满,不是也应该可以的吗?
发表于 2009-10-29 15:23:54 | 显示全部楼层
发送的字符串是包括后面的'\0'的,也就是13个
但是你的程序后面又补了个'\0',所以必须至少14byte空间。
补'\0'是对的,因为收到的不一定是字串,要想printf,必须补。

或者把最后一字节截断,改成data[byteCount-1] = 0;
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 14:05 , Processed in 0.026768 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表