以前的服务器端是用java写的,发送数据如下:
string s_balance="测试";
out.write(s_balance.getBytes());接收端为:
 byte[] Data = new Byte[400];
Int32 bytes = ns.Read(Data, 0, Data.Length);
string receiveData = Encoding.Default.GetString(Data, 0, bytes);这样都能正常接收。
==========================================
现在服务器端我该成C#语言写。
strreturn = "测试";     
sw.Write(strreturn);
sw.Flush();接收端程序不变。这样发送数据,接收端会变成乱码。如果把接收端改成
 byte[] Data = new Byte[400];
Int32 bytes = ns.Read(Data, 0, Data.Length);
string receiveData = Encoding.UTF8.GetString(Data, 0, bytes);
则能正常显示,但先在客户端不能该。
只能修改服务器端的程序。看在服务器端程序怎么修改。

解决方案 »

  1.   

    编码问题,你看看Encoding.Default是什么编码方式,
    然后把s_balance以Default的这种编码方式编码成Bytes
    然后把编码后的字节数组write出去
      

  2.   

    问题很显然是因为两端的编码不统一造成的,楼主不是已经发现了吗?  客户端使用Encoding.Default, 这种情况很有可能默认的编码是是BG2312
      

  3.   

    out.write(s_balance.getBytes());
    ---》》》
    out.write(s_balance.getBytes(".Net中Defalt的编码格式"));
      

  4.   

    out.write(s_balance.getBytes());
    ---》》》
    out.write(s_balance.getBytes(".Net中Defalt的编码格式"));呵呵!这是java 的格式。我现在需要的是C#的这种格式
    strreturn = "测试";   
    sw.Write(strreturn);
    sw.Flush();需要在这里改,我也是这样做的
     byte[] mybyte = System.Text.Encoding.Default.GetBytes(strreturn);
     sw.Write(strreturn);
    但在客户端接收的就是 System.byte不知道sw.Write(strreturn);这里发送的时候需要怎么转换下
      

  5.   

    byte[] mybyte = System.Text.Encoding.Default.GetBytes(strreturn);
     sw.Write(strreturn);
    -----》》》
    sw.Write(mybyte);
      

  6.   

    上面的不对。
    如果sw是StreamWriter
    sw.Encoding=System.Text.Encoding.Default;
    加上这个,然后
    System.Text.Encoding.Default.GetBytes(strreturn);
      

  7.   

    如果sw.Encoding不可以Set那就只能在sw构造的时候加上Encoding了
      

  8.   

    呵呵!谢谢大家的回复!
    sw.Encoding=System.Text.Encoding.Default;
    这句加不上吧!说它是只读属性。
      

  9.   

      //初始化要用的流
                        ns = service.GetStream();
                        sr = new StreamReader(ns);
                        sw= new StreamWriter(ns);
                        //sw.Encoding = System.Text.Encoding.Default;
                        //开始接收内容
                        str = sr.ReadLine();
                        //解析数据,处理信息                    while (str != null)
                        {                        
                            string[] kk = str.Split(',');                         #region  出入口接收类   4个
                            //01 入口收费站查余额 
                            if (kk[0].Equals("entrybalance"))
                            {
                                strreturn = GEntryBalance.GetBalance(str);
                                sw.Write(strreturn);
                                sw.Flush();
                            }
    具体代码如下接收端:byte[] Data = new Byte[400];
    Int32 bytes = ns.Read(Data, 0, Data.Length);
    string receiveData = Encoding.Default.GetString(Data, 0, bytes);
      

  10.   

    string receiveData = Encoding.Default.GetString(Data, 0, bytes);
    你的代码,你接收的使用用的Default 
    string receiveData = Encoding.UTF8.GetString(Data, 0, bytes);
    发送的时候用的 UTF8 不乱码才有鬼!