int port = 8007;
            string host = "192.168.9.63";
            IPAddress ip = IPAddress.Parse(host);
            IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
            Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
            Console.WriteLine("Conneting...");
            c.Connect(ipe);//连接到服务器
            string sendStr = "1111111111111111111111111111111111111111111111111111";
            
            Encoding gb2312 = Encoding.GetEncoding("gb2312");
            byte[] sendStrbytes = gb2312.GetBytes(sendStr);
            string StrLen = sendStrbytes.Length.ToString();
            byte[] sendStrlen = gb2312.GetBytes(StrLen);
            c.Send(sendStrlen, sendStrlen.Length, 0);//发送测试信息
           
            Console.WriteLine("SendMessage");
            c.Send(sendStrbytes, sendStrbytes.Length, 0);//发送测试信息
            byte [] recievelen=new byte [32];
           
            c.Receive(recievelen);
//
            
            string lenth = System.Text.Encoding.Default.GetString(recievelen);
            MessageBox.Show(lenth);
            //byte[] recievedata = new byte[Convert.ToInt32(lenth)];
            byte[] recievedata = new byte[87];
            c.Receive(recievedata);
                                     string rec = gb2312.GetString(recievedata);            MessageBox.Show(rec);服务器只将接受到的数据转出给PC机,但PC接收数据时总是多一点多了一堆乱码:如前台发送
中TRCD1111112中2中2中2中2中国11dddd1111111111111111111111111111111111111111111111111111
则返回的数据为:
◥<\t镴\0\0\0\0\0谼=\t87\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0纔<\t8篚穃瀀\0(y<\t镴
中TRCD1111112中2中2中2中2中国11dddd1111111111111111111111111111111111111111111111111111\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
搞不清

解决方案 »

  1.   

    string lenth = System.Text.Encoding.Default.GetString(recievelen);这个问题..
    你发送的时候用了gb2312 接收的时候使用了ANSI自然出乱码
      

  2.   

     string rec = gb2312.GetString(recievedata);我这用的时gb2312了啊
      

  3.   

    原因找到了,请大家给解释一下下:上面的设计是在传正式文件前先传了正式文件的数据长度过来,我把第一个recieve数据去掉,服务器直接发送想发送的数据,而PC接受数据时使用一个足够大的空间来接受,就可以正常接受,因而应试是第一个recieve影响了第二个接受数据,如果能消除这种影响;