程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MINA服務端與C++客戶端通訊(2)

MINA服務端與C++客戶端通訊(2)

編輯:C++入門知識

Java與C++通訊還有編碼轉碼的問題存在,假設通訊編碼采用UTF-8

C++客戶端發送時需要轉碼成UTF-8編碼,接收服務端應答消息後再轉回Unicode或者GBK編碼

下面給出完成的C++客戶端通訊示例:

void Transcoding(LPCTSTR src, UINT srcCode, string& dest, UINT destCode)  
{  
    int len = MultiByteToWideChar(srcCode, 0, src, -1, NULL, 0);    
    WCHAR* srcTemp = new WCHAR[len];    
    MultiByteToWideChar(srcCode, 0, src, -1, srcTemp, len);    
    len = WideCharToMultiByte(destCode, 0, srcTemp, -1, NULL, 0, NULL, NULL);    
    char* destTemp = new char[len];    
    WideCharToMultiByte(destCode, 0, srcTemp, -1, destTemp, len, NULL, NULL);    
 
    dest = destTemp;  
 
    delete []srcTemp;    
    delete []destTemp;    

 
int _tmain(int argc, _TCHAR* argv[]) 

    // client connect 
    CXSocket client; 
    client.initWinSocket(); 
    client.setAddress("127.0.0.1"); 
    client.setPort(1234); 
    client.setProtoType(TCP); 
    int ret = client.connect(); 
    if(ret < 0) 
    { 
        getchar(); 
        return 0; 
    } 
 
    // 加通訊協議頭demo 
    // client send 
    char send[] = {"CXSocket 第一個測試用例."}; 
 
    string utf8; 
    Transcoding(send, CP_ACP, utf8, CP_UTF8); 
 
    XNET::TPacketHeader sendHeader; 
    sendHeader.m_HeaderSig = 0xABCD; 
    swap_2(sendHeader.m_HeaderSig); 
    sendHeader.m_Length = (int)utf8.length(); 
    swap_4(sendHeader.m_Length); 
 
    char buffer[1024] = {0}; 
    memcpy(buffer, &sendHeader, XNET::TCP_HEADLEN); 
    memcpy(&buffer[XNET::TCP_HEADLEN], utf8.c_str(), utf8.length()); 
    client.sendBuf(buffer, (int)(XNET::TCP_HEADLEN + utf8.length())); 
 
    // client recv 
    XNET::TPacketHeader recvHeader; 
    client.receiveBuf(&recvHeader, XNET::TCP_HEADLEN); 
    swap_2(recvHeader.m_HeaderSig); 
    swap_4(recvHeader.m_Length); 
    char* recv = new char[recvHeader.m_Length + 1]; 
    memset(recv, 0, recvHeader.m_Length + 1); 
    client.receiveBuf(recv, recvHeader.m_Length); 
    string ansi; 
    Transcoding(recv, CP_UTF8, ansi, CP_ACP); 
 
    client.close(); 
    client.uninitWinSocket(); 
 
    getchar(); 
 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved