自从把要发送的类改多了数据以后就开始无法反序列化了.一直找不出问题所在.请教各位高手.
我觉得是接收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)
{
}
}
我觉得是接收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)
{
}
}
我以前做了一个文件传输,以及聊天的东东,
首先就是包含命令号,文件名,ip地址,用户名,聊天内容的数据包,
主要是转化的问题,
转化为byte的时候,
对于文字相关的就要先登记它的总长,然后再添加内容。转化为包的时候
先根据长度,取出对应的byte去转换。
因为接受的时候,一般对方发过来的信息长度是不知道的,
最多只是一个大概范围(除非你做下限定)。