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

来源:互联网 发布:2015网络剧 编辑:程序博客网 时间:2024/05/17 02:39

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 connectCXSocket 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 sendchar 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 recvXNET::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服务端下载地址:http://download.csdn.net/source/3418326

原创粉丝点击