C++和C#之间Socket通信中文乱码

环境:C++ MFC框架,Visual Studio 2010 SP1,C#是Unity3D 5.3.1f1开发,都是Windows10 环境。
参考链接:http://blog.csdn.net/yunffern/article/details/7850526
http://www.cppblog.com/sunraiing9/archive/2007/03/21/20281.html
问题:用的是UDP,C++端是客户端,Unity是服务端,客户端的设置是多字节(Use Multi-Byte Character Set),这就导致客户端在发送的UDP消息如果带有中文的话,服务端接收到的消息就会不全或有乱码。

解决办法:在C++发送前把多字节编码转成Unicode编码,C#在接收时,用Unicode编码。
部分代码如下,C++
这里sendto的第三个参数,是需要两倍的size,因为多字节用8bit来表示字符,Unicode用16bit来表示字符。

        char buffer[1024]="\0";
        strcpy(buffer, pDlg->m_strSendText);
        int nSize = pDlg->m_strSendText.GetLength();

        WCHAR bufU[1024] = L"\0";
        int bufUSize = MultiByteToWideChar(CP_ACP, 0, buffer, -1, bufU, 1024); 
        size_t tempsize = wcslen(bufU);


        if (sendto( pDlg->m_sockClt, (char *)bufU, bufUSize*2, 0, (struct sockaddr*)&server, len) != SOCKET_ERROR)
        {
            ......
        }

C#部分代码

    private void ReceiveData()
    {
        client = new UdpClient(port);
        while (true)
        {
            try
            {
                IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
                byte[] data = client.Receive(ref anyIP);
                string text = Encoding.Unicode.GetString(data);
            }
            catch (Exception err)
            {
                UnityEngine.Debug.LogError(err);
            }
        }
    }
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值