pengxiqin 发表于 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 = 0;数组越界。
为什么当我把这里的DATA_SIZE改成14,byteCount就变成等于0了呢?缓冲区越大,虽然数据没填满,不是也应该可以的吗?

wishel 发表于 2009-10-29 15:23:54

发送的字符串是包括后面的'\0'的,也就是13个
但是你的程序后面又补了个'\0',所以必须至少14byte空间。
补'\0'是对的,因为收到的不一定是字串,要想printf,必须补。

或者把最后一字节截断,改成data = 0;
页: 1 [2]
查看完整版本: 求助ACE中ACE_Acceptor下函数peer().recv_n接收不到数据