请教:如何通过Socket传递自定义的对象?

chinayuchen 2004-11-25 11:13:10
请大家给个相关的例子吧,谢谢!
...全文
350 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzh0523 2004-11-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/roseguns/archive/2004/10/19/142408.aspx
DotNetFreak 2004-11-25
  • 打赏
  • 举报
回复
[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;
}
DotNetFreak 2004-11-25
  • 打赏
  • 举报
回复
可以用.net 提供的 SoapFormatter 或者 BinaryFormatter 把你的object serialize
然后通过socket 传送
在接受方用同样的formatter deserialize 还原出来
jxzhang615 2004-11-25
  • 打赏
  • 举报
回复
帮顶!
DotNetFreak 2004-11-25
  • 打赏
  • 举报
回复
你忘了在Deserialize 前把MemoryStream 的position = 0 了,就像客户端一样
ms.Position = 0;
chinayuchen 2004-11-25
  • 打赏
  • 举报
回复
唉,沉得这么快,再顶一下
大家帮忙呀,up 有分
chinayuchen 2004-11-25
  • 打赏
  • 举报
回复
请帮我看下一这个错误如何处理,谢谢
// 用于传递的类
[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 2004-11-25
  • 打赏
  • 举报
回复
请帮我看下一这个错误如何处理,谢谢
// 用于传递的类
[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: 在分析完成之
前就遇到流结尾。

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧