建立两个项目,一个是服务端,一个是客户端,现在想把一个对象序列化后,发送
给服务端,然后服务端饭序列化后,得到要的数据。
代码如下服务端:
        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;    }客户端:
        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;    }
问题是:服务端接到数据后,显示无法找到程序集。导致不能反序列化对象。
这是怎么回事呢?知道的说下,谢谢

解决方案 »

  1.   

    这个问题 [Serializable]
        public class user
        {
            public string userID;
            public string password;    }这个需要单独放到一个DLL里  服务端和客户端引用这个DLL..另外一种方式 序列化成XML数据发送.
      

  2.   

    顶1楼。
    你的客户端和服务端分别定义了user类,事实上这是两个不同的类,用一种类的实例序列化后,希望反序列化到另一种类的实例上,肯定是不可以的。
      

  3.   


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

  4.   


    赞成,通迅公用的基础结构体或类,放在一个dll中,然后同时引用就ok.   类放dll中怎么调用呢?能说明一下么?
    就是把要用的class放在一个dll中,在使用时引用这个dll,然后using命名空间就可以使用了。
      

  5.   


    新建个库类 把要序列化的类写到这个库类里.编译后..客户端和服务段都添加这个DLL文件的引用.
      

  6.   

    因为服务器端根本就不存在这个类。因为反序列化出来是一个Object对象
    将结构体编译成类库*.dll
      

  7.   

    就是因为服务器端的user类和客户端的user类是两个完全不同的类,不仅仅是命名空间不一样,就连所在的assembly的版本也是完全不同的。换句话说,根本没办法把一个类的实例赋值到另一个毫不相关的类的实例上。你需要新建一个Class Library类型的项目,把这个user类放到这个Class Library中,然后再在服务器和客户端的项目上分别添加引用,在添加引用的对话框中选择“项目”选项卡,之后在该选项卡下列出的项目中,选择你新建的那个Class Library,这样就可以使用这个library下的user类了。
      

  8.   

    就是因为服务器端的user类和客户端的user类是两个完全不同的类,不仅仅是命名空间不一样,就连所在的assembly的版本也是完全不同的。换句话说,根本没办法把一个类的实例赋值到另一个毫不相关的类的实例上。你需要新建一个Class Library类型的项目,把这个user类放到这个Class Library中,然后再在服务器和客户端的项目上分别添加引用,在添加引用的对话框中选择“项目”选项卡,之后在该选项卡下列出的项目中,选择你新建的那个Class Library,这样就可以使用这个library下的user类了。
      

  9.   

    不知道用xml序列化怎么在网络上传输,是传xml文件吗?那怎么把xml文件转成byte数组呢?能不能简单的敲点代码来看看啊
      

  10.   

    DLL简单理解就是class的压缩包,多个类放在里面