MFC编程CAsyncSocket中Receive()接收数据不全

luffyjiangjiang 2016-12-02 08:32:35
编写了一个简单的网络通信程序,但客户端发送“12345”,服务器只能接收到“123”。试了好多次,每次都不能接收全。
左边为服务器,右边为客户端。麻烦大神们看一下,谢谢。
void CSerSocket::OnReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
char re[200];
memset(re, 0, 200);
CString rec;
int len;
len = Receive(re, 200);
rec.Format(_T("收到%d个字符:%s"),len,re);
((CMFCApplication7Dlg*)(AfxGetApp()->m_pMainWnd))->m_ListBox.AddString(rec);
CAsyncSocket::OnReceive(nErrorCode);
}
...全文
599 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-12-05
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
lhc_picture 2016-12-05
  • 打赏
  • 举报
回复
看来是发送的数据和接收的数据编码不一致导致的问题, 另外如果数据长度不定长的话,最好处理一下黏包的情况。
笨笨仔 2016-12-05
  • 打赏
  • 举报
回复
字符串转换方式修改一下,最好写一段函数,直接用%s在UNCODE中可能不好使。
hurryboylqs 2016-12-04
  • 打赏
  • 举报
回复
你发送的代码呢?
luffyjiangjiang 2016-12-03
  • 打赏
  • 举报
回复
我在接收数据处设置一个断点,发现,用字符数组接收数据时,每接收一个字符,后一个数组元素就变为0。见图
向立天 2016-12-03
  • 打赏
  • 举报
回复
引用 3 楼 luffyjiangjiang 的回复:
我在接收数据处设置一个断点,发现,用字符数组接收数据时,每接收一个字符,后一个数组元素就变为0。见图
你这是字符编码的问题,发送过来的是Unicode的字符,你是按着acii处理的,核心的问题应该是按着字节来处理而不是按字符来处理
副组长 2016-12-03
  • 打赏
  • 举报
回复
好多人劝我不要用MFC的SOCKET了,不过我的软件还一直在跑,做的时候很辛苦。 刚弄的话直接就API的SOCKET吧,别人是这么劝我的。
encoderlee 2016-12-03
  • 打赏
  • 举报
回复
发送的时候是unicode字符串wchar_t[],接收的时候当做多字节字符串来处理char[]当然就出问题了。
Eleven 2016-12-02
  • 打赏
  • 举报
回复
Debug下检查一下看看发送和接收的返回值

18,356

社区成员

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

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