【问题标题】:CSocket Client-Server String recieved is chinese looking characters收到的 CSocket 客户端-服务器字符串是中文字符
【发布时间】:2013-03-08 20:52:49
【问题描述】:

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

接收发生的代码

void CClientSock::OnReceive(int nErrorCode)
{
TCHAR buf[1000];
memset(buf,'\0',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] = '\0';
    CString temp(buf);
    recStr = temp;

    CT2A Astring(recStr);
    CString nString(Astring);
    AfxMessageBox(nString);

}
        CAsyncSocket::OnReceive(nErrorCode);
}

【问题讨论】:

  • tera term 很可能使用多字节字符集而不是 unicode 发送您的应用程序数据。您可以使用wireshark 验证这一点。如果您希望您的应用程序使用 Unicode,您将需要一个能够正确向您发送 Unicode 字符串的测试应用程序。
  • 能否添加发送部分(即客户端)的代码?
  • 为什么要使用“CT2A Astring(recStr)”和“CString nString(Astring)”?

标签: c++ unicode mfc client-server asyncsocket


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2018-10-03
    • 2014-12-06
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多