2013-03-08 39 views
1

簡單的CAsyncSocket服務器和客戶端程序。現在我正在使用tera term vt來進行本地測試。所以我在TT中輸入一個單詞,它被髮送到我的程序中,但我收到的字符串只是一堆中文字符。我使用MFC並以Unicode編譯。現在有趣的是,當我遵守多字節字符集時,字符串被接收到很好,所以我不確定這意味着什麼或者我可以改變以獲得結果。其中接收發生CSocket客戶端 - 服務器字符串接收到的是中文字符

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); 
} 
+1

tera術語很可能使用多字節字符集而不是unicode發送您的應用程序數據。你可以用wireshark驗證這一點。如果你想要你的應用程序使用Unicode,你將需要一個測試應用程序,它將正確地向你發送一個Unicode字符串。 – Chad 2013-03-08 21:01:28

+1

您能否添加發送部分(即客戶端)的代碼? – 2013-03-09 08:57:07

+0

爲什麼要使用「CT2A Astring(recStr)」和「CString nString(Astring)」? – crea7or 2013-03-09 13:11:09

回答

0

您從CAsyncSocket::Receive接收到的數據

代碼可能是多字節字符,所以只需更換TCHAR buf[1000];char buf[1000];

您還創建了太多冗餘的CStrings文字轉換。它可以簡化爲:

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

哇這麼簡單的修復非常感謝你 – user1704863 2013-03-11 12:53:28

相關問題