C#对象序列化后,使用udp Socket传送后,反序列化出错。

李渊 发布于 2011/07/05 09:03
阅读 1K+
收藏 1
C#

客户端:

        public void send(Entity.Message msg) //发送udp
        {
            byte[] data = SerializeTool.Serialize<Entity.Message>(msg);
            server.SendTo(data,data.Length, SocketFlags.None,remoteIPEP);
        }

序列化过程:

     public static byte[] Serialize<T>(T obj)
        {
            try
            {
                IFormatter formatter = new BinaryFormatter();
                MemoryStream stream = new MemoryStream();
                formatter.Serialize(stream, obj);
                stream.Position = 0;
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                stream.Flush();
                stream.Close();
                return buffer;
            }
            catch (Exception ex)
            {
                throw new Exception("序列化失败,原因:" + ex.Message);
            }
        }

服务器端:

                recv =newsock.ReceiveFrom(data ,ref Remote);
                Message msg =new Message();
                msg =  SerializeTool.Desrialize<Message>(msg,data);
                Console .WriteLine (msg.Content);

反序列化:

        public static T Desrialize<T>(T obj, byte[] bytes)
        {
            try
            {
                obj = default(T);
                IFormatter formatter = new BinaryFormatter();
                byte[] buffer = bytes;
                MemoryStream stream = new MemoryStream(buffer);
                stream.Seek(0,SeekOrigin.Begin);
                obj = (T)formatter.Deserialize(stream);
                stream.Flush();
                stream.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("反序列化失败,原因:" + ex.Message);
            }
            return obj;
        }

向服务器发送:df

服务器打印出来的:

 

 


 

加载中
0
李渊
李渊

问题可能出在udp在发送之前被加入了udp的信息,反序列化就出错了这样。。。

那怎么办?搞了半天无果,谢谢各位了。

0
笨蛋EGG
笨蛋EGG

没有用过UDP,为什么要加它自己的东西呢?!很多人都需要干净的东西,分离不出来么?!

把加密后和接收到的东西都输出一下,看看有没有什么规律呗···

0
李渊
李渊
问题解决了。是自己不小心加了些东西,所以。。。。
0
阿甘正传
阿甘正传
自己解决了 能说一下你的方法吗
返回顶部
顶部