windows下C++和C#间socket通讯乱码问题解决方案

初学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);

你可能感兴趣的:(C++,windows,socket,C#,byte,通讯)