C#客户端 C++服务端 乱码问题

来源:互联网 发布:兼职 大数据 英文 翻译 编辑:程序博客网 时间:2024/04/30 09:27

不同语言之间进行网络通信时,出现乱码是一种普遍的现象。

我在工作中也遇到了这样的问题——客户端是用C#来写的,服务端是用C++来写的,以下是解决乱码问题的方法:

socket 通信,客户端采用c#
发送报文如下:

                client.Connect(ipAddress, port);
                byte[] byteData = Encoding.UTF8.GetBytes("你好中国");
                client.Send(byteData);
                client.Close();

服务器端采用 c++
recv 接收
char szBuffer[1024];
nBytesRecv = recv(RemoteSocket, szBuffer, 1023, 0 );
汉字出现乱码,解决办法

byte[] byteData = Encoding.Default.GetBytes("你好中国"),也就是将UTF8改为Default

代码如下:

C#客户端:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;namespace CSharpClient{    class Program    {        static Socket _clientSocket;        static void Main(string[] args)        {            //将网络端点表示为IP地址和端口 用于socket侦听时绑定                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555); //填写自己电脑的IP或者其他电脑的IP,如果是其他电脑IP的话需将ConsoleApplication_socketServer工程放在对应的电脑上。              _clientSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);            //将Socket连接到服务器                try            {                _clientSocket.Connect(ipep);                String outBufferStr;                Byte[] outBuffer=null;                Byte[] inBuffer = new Byte[1024];                while (true)                {                    //发送消息                    outBufferStr = Console.ReadLine();                    //outBuffer = Encoding.ASCII.GetBytes(outBufferStr);                    outBuffer = Encoding.Default.GetBytes(outBufferStr + '\0');                    _clientSocket.Send(outBuffer, 0,outBuffer.Length, SocketFlags.None);                    //接收服务器端信息                                    _clientSocket.Receive(inBuffer, 1024, SocketFlags.None);//如果接收的消息为空 阻塞 当前循环                      Console.WriteLine("服务器说:");                    //Console.WriteLine(Encoding.ASCII.GetString(inBuffer));                    Console.WriteLine(Encoding.Default.GetString(inBuffer));                }            }            catch            {                Console.WriteLine("服务未开启!");                Console.ReadLine();            }        }    }} 


C++服务端:

// CppServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <WINSOCK2.H>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return; }SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(5555);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);while(1){char recvBuf[100];recv(sockConn,recvBuf,100,0);printf("%s\n",recvBuf);char sendBuf[100];sprintf(sendBuf,"Welcome %s to 刘洼村",inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);}}


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 户口迁了身份证怎么办 户口迁移了医保怎么办 房屋卖了户口怎么办 驾照过期注销了怎么办 负全责不赔偿怎么办 青岛驾驶证过期了怎么办 驾驶证过了年检怎么办 驾驶证审证逾期怎么办 d驾驶证3年没捡怎么办 c1驾驶证3年没审怎么办 驾驶证换证外地怎么办 考驾驶证快到期怎么办 驾照到期人在国外怎么办 驾驶证3年没审怎么办c3 驾驶证几年没审怎么办 驾照体检过期了怎么办 b2驾照超过年检怎么办 驾驶证过审一年怎么办 驾照一年未年审怎么办 b驾照年审过期怎么办 摩托车驾驶证过期一年怎么办 驾驶证过期一年半怎么办 驾照过期了几天怎么办 驾照过期超过一年怎么办 考试驾照过期了怎么办 驾校考试过期了怎么办 驾驶证明过期了怎么办 驾驶证年过期了怎么办 驾照过期六个月怎么办 移动预约号码取消怎么办 身份证换地址驾驶证怎么办 刚来成都怎么办居住证 我在外地怎么办身份证 身份证丢在外地怎么办 换领新身份证时旧证丢了怎么办 二代身份证重号怎么办 北京行驶证到期怎么办 北京驾驶证即将过期怎么办 去澳门没有网络怎么办 三个周期未年检怎么办 深圳驾照丢了怎么办