自从把要发送的类改多了数据以后就开始无法反序列化了.一直找不出问题所在.请教各位高手.
我觉得是接收2进制时出了问题.但是又不知道怎么改.代码如下:
        private void Send(object temp)
        {
            try
            {
                tcpc = new TcpClient("192.168.1.102", 7000);
                NetworkStream tcpstream = tcpc.GetStream();
                StreamWriter reqstreamw = new StreamWriter(tcpstream);
                reqstreamw.Write(ObjectToByteA(temp));
                reqstreamw.Flush();
                tcpstream.Close();
                tcpc.Close();
            }
            catch (Exception e)
            {
                ErrorRichBox.AppendText(e.Message+'\n');
            }
        }
        private void Listen()
        {
            try
            {
                tcp1 = new TcpListener(7000);
                tcp1.Start();
                while (listenerrun)
                {
                    People p = new People();
                    Socket s = tcp1.AcceptSocket();
                    byte[] stream = new byte[80];//这里改到与发送的类的大小一样,或者更大也一样出错.
                    s.Receive(stream);
                    p = (People)ByteAToObject(stream);//在本机序列和反序列化没有问题.
                    LogonRichBox.AppendText(p.Name);
                }
            }
            catch (Exception e)
            {
            }
        }

解决方案 »

  1.   

    没遇见过你说的情况,
    我以前做了一个文件传输,以及聊天的东东,
    首先就是包含命令号,文件名,ip地址,用户名,聊天内容的数据包,
    主要是转化的问题,
    转化为byte的时候,
    对于文字相关的就要先登记它的总长,然后再添加内容。转化为包的时候
    先根据长度,取出对应的byte去转换。
    因为接受的时候,一般对方发过来的信息长度是不知道的,
    最多只是一个大概范围(除非你做下限定)。
      

  2.   

    应该是最初发送的数据和收到的数据不一致。你用 nc 或者 wireshark 看下发送和接受的数据包。