MINA服务端与C++客户端通讯(2)

来源:互联网 发布:中国新歌声2网络直播 编辑:程序博客网 时间:2024/06/05 17:27

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; 
}  

原创粉丝点击