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

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

CXSocket类下载地址:http://code.google.com/p/x-net/

MINA服务端Demo下载地址:http://download.csdn.net/source/3418326

你可能感兴趣的:(MINA服务端与C++客户端通讯(2))