1

シンプルなCAsyncSocketサーバーとクライアントプログラム。現在、teratermvtを使用してローカルでテストしています。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);
}
4

1 に答える 1

0

受信したデータCAsyncSocket::Receiveはおそらくマルチバイト文字であるため、を次のように置き換えてTCHAR buf[1000];ください。char buf[1000];

また、テキスト変換のために作成した冗長なCStringが多すぎます。これは次のように簡略化できます。

default:
    buf[bytesRead] = '\0';
    recStr = buf;
    AfxMessageBox(recStr);
于 2013-03-11T02:29:06.840 に答える