我写了一个TCP通讯程序,通讯时正常的。 就是传过来的数据我不知道该如何转换。
例如: 我在客户端种写入  123 发送到服务器中  通过跟踪 到
length = sock.Receive(date, 1024, SocketFlags.None);
的时候date的值 :
date[0]=49;
date[1]=50;
date[2]=51;
我想知道用什么方法转换成原来的 123  最好?
我还想请教各位高手。 为什么传递过来以后会变成这样?
public void Receive()
            {
                byte[] date = new byte[100];
                int length = 0;
                int message;
                while (true)
                {
                    try
                    {
                        length = sock.Receive(date, 1024, SocketFlags.None);
                        if (length > 0) //接收到了数据
                        {
                        }
                        else//没有接收到数据
                        { 
                        
                        
                        }
                    }
                    catch (Exception)
                    {
                        break;
                    }
                }
            }

解决方案 »

  1.   

    发送之前 应该 编码的 看看这个
    在C#中我采用poll方法,来避免客户端SOCKET连接超时。 
    当服务器没有启动时,客户端用POLL方法可以很快检查到,不能连接到服务器,于是客户端马上CLOSE掉了该SOCKET;1秒钟后,重新创建SOCKET,继续用poll方法检测能否连接到该服务器。但,当服务器突然启动后,服务器会报“远程主机强迫关闭了一个现有连接”的错误,而我客户端也不会马上显示“连接上了服务器”,这样影响了我用poll方法来检测连接到服务器的及时性和准确性。 
    请大侠帮小弟分析和解决该问题,万分感激! 如下是:客户端和服务器代码: 
    客户端: 
    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using System.Net; 
    using System.Net.Sockets; 
    using System.Collections; 
    using System.Threading; 
    namespace ConsoleApplication9 

        class Program 
        { 
          static  byte[] MessageArray = new byte[1039]; 
            static void Main(string[] args) 
            { 
                Program a = new Program(); 
                for (int i = 0; i < 10000; i++) 
                { 
                  a.sengMessage(); 
                } 
            }         public void sengMessage() 
            { 
                IPAddress address1 = IPAddress.Parse("192.168.16.204"); 
                IPEndPoint iep = new IPEndPoint(address1, 9999);//目的IP地址和端口号 
                IPAddress LocalAddress = IPAddress.Parse("192.168.16.205"); 
                IPEndPoint iep1 = new IPEndPoint(LocalAddress, 0);//本地IP地址和任意端口号             Socket serversocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
                  try 
                { 
                    serversocket.Bind(iep1);//指定主通道的数据从本机指定的IP地址(网口)发送。 
                  } 
                catch 
                { 
                    Console.WriteLine("绑定失败(发送P2P)"); 
                } 
                try 
                { 
                  serversocket.Blocking = false;//设置为非阻塞模式 
                    serversocket.Connect(iep); 
                } 
                catch (SocketException) 
                { 
                    if (serversocket.Poll(1000, SelectMode.SelectWrite)) 
                    { 
                    serversocket.Blocking = true;//将SOCKET恢复成阻塞模式 
                        Console.WriteLine("该SOCKET连上"); 
                    } 
                    else 
                    { 
                      Console.WriteLine("该SOCKET没有连上"); 
                      serversocket.Close 
                      return;//如果不成功就跳出,继续检测能否连上服务器 
                    } 
                } 
                int offset = 0; 
                int size = MessageArray.Length;//长度为1039 
                int dataleft = size; 
                try 
                { 
                    while (dataleft > 0) 
                    { 
                        int sent = serversocket.Send(MessageArray, offset, dataleft, SocketFlags.None); 
                        offset += sent; 
                        dataleft -= sent; 
                    } 
                    Console.WriteLine("已经给计算机发送了P2P消息" + MessageArray[0]); 
                    serversocket.Shutdown(SocketShutdown.Send); 
                    serversocket.Close(); 
                } 
                catch (Exception e) 
                { 
                    Console.WriteLine(e.ToString()); 
                } 
              
            } 
        } 
    } 服务器端: 
    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using System.Net; 
    using System.Net.Sockets; namespace ConsoleApplication1 

        class Program 
        { 
            byte[] receivemessage=new byte[1039]; 
            static void Main(string[] args) 
            { 
                Program a = new Program(); 
            } 
            Program() 
            { 
                IPAddress address = IPAddress.Parse("192.168.16.204"); 
                IPEndPoint iep = new IPEndPoint(address, 9999); 
                Socket clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//用于(主通道)P2P的socket通道(接受数据)             try 
                { 
                    clientsocket.Bind(iep);//把套接字与本地地址绑定,从指定的网口和端口收信息 
                } 
                catch (SocketException) 
                { 
                    Console.WriteLine("SOCKET绑定失败!"); 
                    return; 
                } 
                clientsocket.Listen(30 
                while (true) 
                { 
                    Console.WriteLine("等待客户端连接"); 
                    Socket client = clientsocket.Accept 
                      try 
                    { 
                        int offset = 0; 
                        int recv; 
                        int dataleft = 1039;//因为发的长度是1039,所以也应该收1039个字节的数据 
                          while (dataleft > 0) 
                        { 
                            recv = client.Receive(receivemessage, offset, dataleft, 0); 
                            if (recv == 0) 
                                break; 
                            offset += recv; 
                            dataleft -= recv; 
                        } 
                        Console.WriteLine("该信息是第{0}条记录", receivemessage[0]); 
                    } 
                    catch(Exception e) 
                    { 
                        Console.WriteLine("~~~~~~~~~~~~~"+e.Message);//远程主机强迫关闭了一个现有连接 
                    } 
                } 
            } 
        } 
      

  2.   

    因为它是字节数组,传递的时候肯定是以字节的形式啊转换
    byte[] arybyte = new byte[] { 49, 50, 51 };            string str = Encoding.Default.GetString(arybyte);
      

  3.   

    简单: string str=new str;
          str=encoding.bigenglish.getstring(date);//可能英文单词拼写错了你自己看下 就这个
    你得到的string就是转换回来的东西。如果你想再转换回去就 date=encoding.bigenglish.getbytes(str);
    就这样转来转去,我也刚做这个聊天系统
      

  4.   

    客户端写入是以ASCII编码的?string s=Encoding.ASCII.GetString(date);这样就可以将其还原了。
      

  5.   

    是编码转换问题:多试一下几个编码,服务器要与客户端那边的编码保持一到:Encoding.ASCII.GetString或Encoding.Default.GetString(arybyte);或GB2312。
      

  6.   

    非常感谢各位。。 我上网查的资料总是  <<  和  bitconvert 相关的方法。 看来还很多要学习啊