日期:2014-05-17  浏览次数:20962 次

反序列化 socket传输
建立两个项目,一个是服务端,一个是客户端,现在想把一个对象序列化后,发送
给服务端,然后服务端饭序列化后,得到要的数据。
代码如下
C# code

服务端:
        private void button1_Click(object sender, EventArgs e)
        {
             IPAddress ip = IPAddress.Parse("127.0.0.1");
            IPEndPoint ipep = new IPEndPoint(ip, 55555);
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


            server.Bind(ipep);
            server.Listen(10);

            while (true)
            {
                Socket s = server.Accept();
                byte[] uspw = new Byte[1024];
                //接受  然后反序列化 
                s.Receive(uspw);
                BinaryFormatter formatter = new BinaryFormatter();
                MemoryStream stream = new MemoryStream(uspw);
               
                user us= (user)formatter.Deserialize(stream);

            }

        }

   [Serializable]
    public class user
    {
        public string userID;
        public string password;

    }



C# code

客户端:
        private void button1_Click(object sender, EventArgs e)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            client.Connect(IPAddress.Parse("127.0.0.1"), 55555);

            MemoryStream stream = new MemoryStream();
            IFormatter formatter = new BinaryFormatter();

            user us = new user();
            us.userID = "xiao";
            us.password = "rrr";

            formatter.Serialize(stream, us);
            stream.Flush();

            byte[] uspw = stream.ToArray();
 

            client.Send(uspw);

        }


    [Serializable]
    public class user
    {
        public string userID;
        public string password;

    }



问题是:服务端接到数据后,显示无法找到程序集。导致不能反序列化对象。
这是怎么回事呢?知道的说下,谢谢

------解决方案--------------------
这个问题 

[Serializable]
public class user
{
public string userID;
public string password;

}

这个需要单独放到一个DLL里 服务端和客户端引用这个DLL..

另外一种方式 序列化成XML数据发送.
------解决方案--------------------
顶1楼。
你的客户端和服务端分别定义了user类,事实上这是两个不同的类,用一种类的实例序列化后,希望反序列化到另一种类的实例上,肯定是不可以的。

------解决方案--------------------
对DLL不是很懂……
学习了。
------解决方案--------------------
探讨
这个问题

[Serializable]
    public class user
    {
        public string userID;
        public string password;

    }

这个需要单独放到一个DLL里  服务端和客户端引用这个DLL..

另外一种方式 序列化成XML数据发送.

------解决方案--------------------
使用xml序列化就可以了
------解决方案--------------------
探讨
引用:

这个需要单独放到一个DLL里  服务端和客户端引用这个DLL..



类放dll中怎么调用呢?能说明一下么?

------解决方案--------------------
不知道,帮顶,记得给分啊
------解决方案--------------------
学习中。。。。。
------解决方案--------------------
学习
------解决方案--------------------
学习。