初学C++和网络编程
最近在做个C++和C#间socket通讯的程序,本来对C++就不熟悉,对C++的网络编程就更不熟悉了,结果被传输中文时乱码的问题搞了好几天
参考了以下文章终于解决:
http://www.80edu.com/html/it/net/jishu/9346.html
http://www.cppblog.com/sunraiing9/archive/2007/03/21/20281.html
还有好几篇比较久之前看到的,内容跟上面的差不多
具体解决方案如下:
C++端:
//buf数组为char型
//bufU数组为WCHAR型
//使用的size可根据需要动态调整
接收时,从C#端发过来的是Unicode编码的字节数组,所以使用WideCharToMultiByte进行转换:
接收:
bytes = recv(*socket, (char *)bufU, sizeof(buf), 0);
转换:
WideCharToMultiByte(CP_OEMCP, 0, bufU, -1, buf, 1024, NULL, FALSE);
要输出则对buf数组做一下处理:
buf[bytes] = '\0';
发送时,是要将C++端使用ASCII编码的字符数组转换为C#使用的Unicode编码,所以使用MultiByteToWideChar进行转换:
转换:
MultiByteToWideChar(CP_ACP, 0, buf, -1, bufU, 1024);
发送:
send(socket, (char *)bufU, strlen(buf), 0);
C#端:
//我这里是使用流NetworkStream进行接收和发送
发送:
将要发送的字符串转换为byte数组:
outBuffer = Encoding.Unicode.GetBytes(outBufferStr);
发送:
stream.Write(outBuffer, 0, outBuffer.Length); 接收:
接收(size根据实际需要调整):
stream.Read(bytes, 0, 256);
将接收到的byte数组转换为字符串:
Encoding.Unicode.GetString(inBytes);