C# socket如何接收一个对象

yang_jnu 2010-10-31 05:06:59
服务器端是C#写的,客户端是VC写的,客户端把一个对象发送过来,如:
class A{
int a;
int b;}

服务端如何接收并提取这个对象的a,b值呢?若是vc,直接新建一个对象,把收到的数据放到该对象的地址上即可,因为对C#不熟,不知C#应如何操作,所以请教下大家。。
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_jnu 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhgroup 的回复:]

序列化与反序列化,
流可以是由byte[]实化的MemoryStream
[/Quote]
感谢指教,目前就是用这种方法,代码如下:
//序列化
public static byte[] ObjectToBytes(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
return ms.GetBuffer();
}
}

//反序列化
public static object BytesToObject(byte[] Bytes)
{
using (MemoryStream ms = new MemoryStream(Bytes))
{
IFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(ms);
}
}
yang_jnu 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]

引用楼主 yang_jnu 的回复:
若是vc,直接新建一个对象,把收到的数据放到该对象的地址上即可如果要按照字节精确对照某一个c++环境的某一个业务版本,建议你让它去c++继续编程吧,不要用于.net项目中。

一个项目,会考虑到在开发阶段其数据字段/属性定义可能随时修改类型,可能随时插入或者删除字段/属性,那么至少要考虑到这种适配要在一分钟内完成。

一个系统,服务端要考虑各种客户……
[/Quote]
你说的挺对的。。
豆豆呢 2010-10-31
  • 打赏
  • 举报
回复
学习一下,受教了
wangyue4 2010-10-31
  • 打赏
  • 举报
回复
把对象序列化成流,接收端再把流反序列化成对象,注意两边的程序集名称要一样才行
zhgroup 2010-10-31
  • 打赏
  • 举报
回复
序列化与反序列化,
流可以是由byte[]实化的MemoryStream
让爱延续 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yang_jnu 的回复:]
A a = new A();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, a);
弱弱地问下,fs是一个流对象,怎么获取socket的流?
[/Quote]

socket 中传输的是字节数组,从流中读取字节数组 然后在发送就可以了。接受的时候再将接受到的字节数组写入流中 反序列化。
  • 打赏
  • 举报
回复
[Quote=引用楼主 yang_jnu 的回复:]
若是vc,直接新建一个对象,把收到的数据放到该对象的地址上即可[/Quote]如果要按照字节精确对照某一个c++环境的某一个业务版本,建议你让它去c++继续编程吧,不要用于.net项目中。

一个项目,会考虑到在开发阶段其数据字段/属性定义可能随时修改类型,可能随时插入或者删除字段/属性,那么至少要考虑到这种适配要在一分钟内完成。

一个系统,服务端要考虑各种客户端,所以它比较规范。你们的公司不是有服务端嘛?!那么就不用讲什么vc,按照服务端的通讯规范来办!
  • 打赏
  • 举报
回复
[Quote=引用楼主 yang_jnu 的回复:]
若是vc,直接新建一个对象,把收到的数据放到该对象的地址上即可如果要按照字节精确对照某一个c++环境的某一个业务版本,建议你让它去c++继续编程吧,不要用于.net项目中。

一个项目,会考虑到在开发阶段其数据字段/属性定义可能随时修改类型,可能随时插入或者删除字段/属性,那么至少要考虑到这种适配要在一分钟内完成。
yang_jnu 2010-10-31
  • 打赏
  • 举报
回复
A a = new A();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, a);
弱弱地问下,fs是一个流对象,怎么获取socket的流?
yang_jnu 2010-10-31
  • 打赏
  • 举报
回复
先测试下1楼的方法先。。
suners 2010-10-31
  • 打赏
  • 举报
回复
方法 到底
wuyq11 2010-10-31
  • 打赏
  • 举报
回复
SoapFormatter或者BinaryFormatter object serialize
然后通过socket

110,571

社区成员

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

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

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