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

Posted on 2011-07-05 15:31 chugf 阅读(3417) 评论(5)  编辑 收藏 引用

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

Feedback

# re: MINA服务端与C++客户端通讯(2)  回复  更多评论   

2011-07-07 22:18 by 放屁阿狗
我看出你在win32平台开发习惯的人,代码不够简洁,使用的数据类型也不容易做移植,用个好的框架能节省60%的代码,考虑一下qt和wx,小的东东也不用ace了

# re: MINA服务端与C++客户端通讯(2)  回复  更多评论   

2011-07-08 09:06 by chugf
@放屁阿狗
我一直在win32平台开发,所以很少考虑移植性,谢谢提醒

# re: MINA服务端与C++客户端通讯(2)  回复  更多评论   

2011-07-09 14:36 by VGA采集卡
试下看效果如何,刚入门没多久看这些代码还真有点费劲

# re: MINA服务端与C++客户端通讯(2)  回复  更多评论   

2011-07-09 14:37 by 会员管理系统
跟我们使用的开发语言一样,框架类的东西有时真的是离不开

# re: MINA服务端与C++客户端通讯(2)  回复  更多评论   

2012-03-20 16:09 by 2265
2265.com 安卓游戏

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 5, comments - 22, trackbacks - 0, articles - 0

Copyright © chugf