请教:如何通过Socket传递自定义的对象?
主 题: 请教:如何通过Socket传递自定义的对象?
作 者: chinayuchen (雨辰)
等 级: ^
信 誉 值: 99
所属社区: .NET技术 C#
问题点数: 50
回复次数: 8
发表时间: 2004-11-25 11:13:11
请大家给个相关的例子吧,谢谢!
回复人: jxzhang615(冰河) ( 四级(中级)) 信誉:100 2004-11-25 11:14:16 得分: 5
帮顶!
回复人: DotNetFreak() ( 一级(初级)) 信誉:100 2004-11-25 11:33:47 得分: 5
可以用.net 提供的 SoapFormatter 或者 BinaryFormatter 把你的object serialize
然后通过socket 传送
在接受方用同样的formatter deserialize 还原出来
回复人: DotNetFreak() ( 一级(初级)) 信誉:100 2004-11-25 11:57:53 得分: 20
[Serializable]
public class MyClass
{
public string MyClassMember = "Hello World";
}
public void Send(Socket socket)
{
MyClass obj = new MyClass();
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
byte[] data = new byte[1024];
while (ms.Read(data, 0, 1024) > 0)
{
sk.Send(data);
}
}
public void Recieve(Socket socket)
{
BinaryFormatter bf = new BinaryFormatter();
byte[] data = new byte[1024];
MemoryStream ms = new MemoryStream();
while (sk.Receive(data) > 0)
{
ms.Write(data, 0, 1024);
}
MyClass obj = bf.Deserialize(ms) as MyClass;
}
回复人: yzh0523(水手) ( 四级(中级)) 信誉:100 2004-11-25 12:01:21 得分: 20
http://blog.csdn.net/roseguns/archive/2004/10/19/142408.aspx
回复人: chinayuchen(雨辰) ( 一级(初级)) 信誉:99 2004-11-25 14:40:57 得分: 0
请帮我看下一这个错误如何处理,谢谢
// 用于传递的类
[Serializable]
public class MyClass
{
public string MyClassMember = "Hello World";
}
// 客户端
[Serializable]
public class MyClass
{
public string MyClassMember = "Hello World";
}
public class Client
{
static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(Dns.GetHostByName("127.0.0.1").AddressList[0], 1000);
try
{
sock.Connect(ep);
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
MyClass obj = new MyClass();
bf.Serialize(ms, obj);
ms.Position = 0;
byte[] data = new byte[1024];
while (ms.Read(data, 0, 1024) > 0)
sock.Send(data);
}
catch { }
finally
{
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
}
// 服务器端
public class Server
{
static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(Dns.GetHostByName("localhost").AddressList[0], 1000);
sock.Bind(ep);
sock.Listen(1);
Console.WriteLine("Server is Start...");
Socket sc = sock.Accept();
BinaryFormatter bf = new BinaryFormatter();
byte[] data = new byte[1024];
MemoryStream ms = new MemoryStream();
while (sc.Receive(data) > 0)
ms.Write(data, 0, 1024);
MyClass obj = bf.Deserialize(ms) as MyClass; // 这一行产生以下的异常信息
Console.WriteLine(obj.MyClassMember);
}
}
未处理的异常: System.Runtime.Serialization.SerializationException: 在分析完成之前就遇到流结尾。
回复人: chinayuchen(雨辰) ( 一级(初级)) 信誉:99 2004-11-25 14:42:17 得分: 0
请帮我看下一这个错误如何处理,谢谢
未处理的异常: System.Runtime.Serialization.SerializationException: 在分析完成之前就遇到流结尾。
回复人: chinayuchen(雨辰) ( 一级(初级)) 信誉:99 2004-11-25 15:27:44 得分: 0
唉,沉得这么快,再顶一下
大家帮忙呀,up 有分
回复人: DotNetFreak() ( 一级(初级)) 信誉:100 2004-11-25 17:34:00 得分: 0
你忘了在Deserialize 前把MemoryStream 的position = 0 了,就像客户端一样
ms.Position = 0;
该问题已经结贴 ,得分记录: jxzhang615 (5)、 DotNetFreak (5)、 DotNetFreak (20)、 yzh0523 (20)、