当前位置: 代码迷 >> 综合 >> CAsyncSocket:send函数发送信息(CString类型字符串信息)
  详细解决方案

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

热度:106   发布时间:2023-10-20 13:15:04.0

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”,服务端也能正确的接收。

  相关解决方案