CAsyncSocket:利用MFC封装的Socket发送数据信息(CString类型字符串信息)出错分析

代码如下:

class ClientSocket : public CAsyncSocket   //重新定义Socket类
{
public:
    ClientSocket();
    virtual ~ClientSocket();
    virtual void OnConnect(int nErrorCode);
    virtual void OnClose(int nErrorCode);
    virtual void OnReceive(int nErrorCode);
};

ClientSocket *m_ClientSocket;  

m_ClientSocket->Send(m_Word, m_Word.GetLength());   其中m_word为CString类型的字符  

m_Word.GetLength()为获取m_word字符的长度

运行改代码发现接收端不能正确的接收全部字符,会漏掉一些字符,如下图所示:

CAsyncSocket:send函数发送信息(CString类型字符串信息)

客服端(右边)发送之服务端字符“hhhhh”,服务端并不能正确的收到5个字符而只收到3个字符

 查询MFC的帮助文档send函数的介绍如下:

CAsyncSocket:send函数发送信息(CString类型字符串信息)

从中可以得出第二个参数nBuflen是已字节为单位的长度,而m_Word.GetLength()得到的是字符数,每个字符

为2个字节,所以正确的字节数应为m_Word.GetLength()的两倍,代码修改如下:

m_ClientSocket->Send(m_Word, 2*m_Word.GetLength());

重新运行代码,结果如下:

CAsyncSocket:send函数发送信息(CString类型字符串信息)

修改代码之后客服端发送字符“hhhhh”,服务端也能正确的接收。

相关文章:

  • 2021-11-26
  • 2021-12-18
  • 2021-12-29
  • 2021-12-17
  • 2022-01-14
  • 2021-05-21
  • 2022-02-17
  • 2021-05-19
猜你喜欢
  • 2022-01-09
  • 2021-07-09
  • 2022-02-16
  • 2021-05-08
  • 2021-06-26
相关资源
相似解决方案