反序列化 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不是很懂……
学习了。
[解决办法]
[解决办法]
使用xml序列化就可以了
[解决办法]
[解决办法]
不知道,帮顶,记得给分啊
[解决办法]
学习中。。。。。
[解决办法]
学习
[解决办法]
学习。
[解决办法]
因为服务器端根本就不存在这个类。因为反序列化出来是一个Object对象
将结构体编译成类库*.dll