`
zhaohaolin
  • 浏览: 1016301 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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; 

分享到:
评论

相关推荐

    java游戏(网络编程-服务端).zip

    2. **多线程**:在网络游戏中,服务端需要同时处理多个玩家的请求。因此,多线程技术是必不可少的。Java的`Thread`类和`ExecutorService`接口提供了强大的线程管理能力,开发者可能会使用这些工具来创建和管理服务端...

    一个经典的socket通信程序

    3. **客户端与服务端**:在Socket通信中,客户端通常发起连接请求,而服务端则等待并响应这些请求。客户端代码通常包含创建Socket、连接到服务器、发送数据、接收数据和关闭连接等步骤;服务端则需要监听特定端口,...

    ftp 服务器

    对于Visual C++开发者,可能会选择使用C++编写的开源FTP服务器项目,如Win32 FTP Server或Apache MINA FTPServer。 2. **安装和配置**:下载并安装FTP服务器软件后,需要进行配置。这通常包括设置监听的IP地址和...

    Netty框架技术分享资料

    Netty框架的优势在于它可以提供高性能高可靠的数据传输处理能力,根基公开测试结果,Netty作为TCP服务端,在4核16G内存阿里云服务器的硬件环境下单节点可以做到10万+级别TCP客户端设备同时在线。 在Java开发中,...

    java开源包2

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包1

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包11

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包3

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包6

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包5

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包10

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包4

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包8

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包7

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包9

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    java开源包101

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

    Java资源包01

    WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 ...

Global site tag (gtag.js) - Google Analytics