简单的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);