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字符的长度
运行改代码发现接收端不能正确的接收全部字符,会漏掉一些字符,如下图所示:
客服端(右边)发送之服务端字符“hhhhh”,服务端并不能正确的收到5个字符而只收到3个字符
查询MFC的帮助文档send函数的介绍如下:
从中可以得出第二个参数nBuflen是已字节为单位的长度,而m_Word.GetLength()得到的是字符数,每个字符
为2个字节,所以正确的字节数应为m_Word.GetLength()的两倍,代码修改如下:
m_ClientSocket->Send(m_Word, 2*m_Word.GetLength());
重新运行代码,结果如下:
修改代码之后客服端发送字符“hhhhh”,服务端也能正确的接收。