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