在服务器与客户端交互时,有时候服务器与客户端并不是拿同一种编程语言写的,这时候需要注意字符编码转换的问题。以java服务器和c#客户端为例,此时把c#端接收到的数据用GBK编码表示。
Encoding encoding = Encoding.GetEncoding("GBK"); //定义GBK编码
returnMsg = encoding.GetString(memStream.GetBuffer(), 0, memStream.GetBuffer().Length);
具体代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace 客户端与java { class Program { static string IP = "127.0.0.1"; //定义IP地址 static int port = 9999; //端口号 static void Main(string[] args) { TcpClient tcp = new TcpClient(); tcp.Connect(IP, port); //tcp连接 MemoryStream memStream = null; //存取读回的流 string returnMsg = string.Empty; //与服务器建立连接 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//定义套接口 IPAddress add = IPAddress.Parse(IP); //提供IP协议 IPEndPoint endPt = new IPEndPoint(add, port); //表示网络端点 socket.Connect(endPt); //建立网络端点与主机的连接 //接收数据 byte[] buffer = new byte[1024]; //返回的数据存入buffer int recCount = 0; memStream = new MemoryStream(); //接收返回的字节流 while ((recCount = socket.Receive(buffer)) > 0) //接收到的缓冲区的数据大于0时 { memStream.Write(buffer, 0, recCount); //将缓冲区的数据写入buffer } Encoding encoding = Encoding.GetEncoding("GBK"); //定义GBK编码 returnMsg = encoding.GetString(memStream.GetBuffer(), 0, memStream.GetBuffer().Length); //将内存中的流转为GBK编码格式 Console.WriteLine(returnMsg); Console.ReadLine(); } } }