none
C# 客户端 Socket 通信编码的问题 RRS feed

  • 问题

  • C# 客户端 Socket 通信编码的问题                   
     我用 C# 写了一个客户端的程序,服务端是一个 VC++ 6 写的程序

    C# 代码如下:
    client.Connect("localhost", 8000);
    output = client.GetStream();
    writer = new BinaryWriter(output);
    writer.Write("你好");

    C# 客户端发送了这个“你好”字符串后,VC6 的服务端收到显示的是“??”的乱码形式

    原因可能是 C# socket 通信是 utf8 编码,而 VC6 服务端程序则没有 utf8 解码

    请问我不去修改 VC 的服务端程序,就改 C# 客户端应该如何做?
    2007年8月7日 7:32

答案

  • 我也觉得是服务器端和客户端两边使用的编码方式不一样才出现乱码的。最好的方式是两边都使用UTF-8,如果你服务器这边的代码没法改,那可以尝试在客户端做点修改,把字符串按照服务器端代码的编码方式来编码。具体修改的方法您可以参考以下MSDN文档:
    Socket.Send Method
    http://msdn2.microsoft.com/en-us/library/system.net.sockets.socket.send(VS.71).aspx

    您可以手动声明一个Encoding对象来转换成GB2312等编码,再使用这个对象的GetBytes()方法取到字节。

    具体方法您可以参考这两篇文档:
    Encoding.GetEncoding Method (Int32)
    http://msdn2.microsoft.com/en-us/library/wzsz3bk3.aspx
    Encoding.GetEncodings Method
    http://msdn2.microsoft.com/en-us/library/system.text.encoding.getencodings.aspx

    因为VC++ 6.0已经超过产品支持的生命期,无法找到相应的文档来说明默认的编码方式,所以您只能做一些尝试
    2007年8月7日 9:20