C++ 使用csocket::receive on c+从客户端接收消息+;

C++ 使用csocket::receive on c+从客户端接收消息+;,c++,C++,客户端将消息发送到服务器,从csocket::receive函数返回的缓冲区大小是消息的正确大小。服务器接收到真实消息的正确缓冲区大小,但消息本身比应该的短: 结束语: UpdateData(); if(m_ClientSocket.send(m_strMessage.GetBuffer(m_strMessage.GetLength()),m_strMessage.GetLength()){} else {AfxMessageBox(L"failed to send message")}

客户端将消息发送到服务器,从csocket::receive函数返回的缓冲区大小是消息的正确大小。服务器接收到真实消息的正确缓冲区大小,但消息本身比应该的短:

结束语:

UpdateData();
if(m_ClientSocket.send(m_strMessage.GetBuffer(m_strMessage.GetLength()),m_strMessage.GetLength()){}   
else {AfxMessageBox(L"failed to send message")}
收到:

TCHAR strRec[256]=L"";

int n=CSocket::Receive(strRec,256);

如果我发邮件给ex:12345

n
将为5
但strRec中的消息会更短,比如说12条。

我不会作为答案发布,因为我手头没有参考资料,但我记得在MFC的日子里,大家都知道CSocket根本不起作用。如果您想留在MFC中,请使用CASyncSocket-通常是通过继承它并重写某些方法来完成的。已经尝试过的方法也是一样的。不确定这是否符合您的症状,但是-您对TCHAR的定义在两侧都是相同的-在发送端不是窄的,在接收端不是宽的…?是的,发送时的CString和接收时的TCHAR本身并不能保证每端的字符宽度与TCHAR有相同的条件定义为宽或窄,这通常取决于是否定义了UNICODE。顺便说一下,您对receive的调用应该是
CSocket::receive(strRec,256*sizeof(TCHAR))