接收到的CSocket客户端-服务器字符串是中文字符



简单的CAsyncSocket服务端和客户端程序。现在我在本地测试用的是term vt,所以我在TT中输入一个单词,它被发送到我的程序,但我收到的字符串只是一串中文字符。我正在使用MFC和编译Unicode。现在有趣的是,当我遵守多字节字符集时,字符串被接收得很好,所以我不确定这意味着什么,或者我可以改变什么来得到那个结果。

发生接收的代码

void CClientSock::OnReceive(int nErrorCode)
{
TCHAR buf[1000];
memset(buf,'',1000);
CString recStr;
int bytesRead;
bytesRead = Receive(buf,1000);
switch(bytesRead)
{
case 0:
    Close();
    break;
case SOCKET_ERROR:
    if(GetLastError() != WSAEWOULDBLOCK)
    {
        AfxMessageBox(L"Error occured");
        Close();
    }
    break;
default:
    buf[bytesRead] = '';
    CString temp(buf);
    recStr = temp;
    CT2A Astring(recStr);
    CString nString(Astring);
    AfxMessageBox(nString);
}
        CAsyncSocket::OnReceive(nErrorCode);
}

您从CAsyncSocket::Receive收到的数据可能是多字节字符,因此只需将TCHAR buf[1000];替换为char buf[1000];

您还为文本转换创建了太多冗余的cstring。可以简化为:

default:
    buf[bytesRead] = '';
    recStr = buf;
    AfxMessageBox(recStr);

最新更新