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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值