环境: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);
}
}
}
版权声明:本文为a117653909原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。