C#如何在两个应用程序中传递对象

deathyuxue 2016-07-11 11:54:44
现有A、B两个应用程序,需求是B应用程序运行后得到一个Image对象与一个字符串对象,然后需要传递给A应用程序,应该用TCP通讯还是Remoting比较方便呢?使用TCP的话客户端怎么判断接收的是Image对象还是字符串对象呢?(传输字符串时加上前缀[length=字符串长度],这样客户端接收的时候就能知道要接收多长的字符串,可是如果是Image对象应该如何处理?)
...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2016-07-11
  • 打赏
  • 举报
回复
TCP通讯不会发生粘包 所谓“粘包”是你眉毛胡子一把抓或越主代疱的结果,这怪不得 TCP
  • 打赏
  • 举报
回复
引用 5 楼 u013315639 的回复:
[quote=引用 4 楼 deathyuxue 的回复:] [quote=引用 3 楼 xuzuning 的回复:] Remoting比较方便,大部分事情都替你完成了 自己用 TCP 也可以,传递的应是序列化后的对象(字符串)
我现在用一个类把我要传递的数据封装起来,然后序列化再发送到客户端,我先发流的长度,再发流中的数据,但是这样如果产生粘包导致接收不到正确的流长度应该怎么处理???[/quote] 去查查校验码,一通百通[/quote] 处理不了粘包,就根本不知道如何接收校验码。 而 tcp 是可靠通讯机制,底层不但有校验、而且还有网络拥塞优化机制,自己的程序中根本用不着校验码。
  • 打赏
  • 举报
回复
引用 4 楼 deathyuxue 的回复:
[quote=引用 3 楼 xuzuning 的回复:] Remoting比较方便,大部分事情都替你完成了 自己用 TCP 也可以,传递的应是序列化后的对象(字符串)
我现在用一个类把我要传递的数据封装起来,然后序列化再发送到客户端,我先发流的长度,再发流中的数据,但是这样如果产生粘包导致接收不到正确的流长度应该怎么处理???[/quote] 粘包怎么会接收不到正确的流长度?你不会是弄得粘包就丢数据吧。如果一个消息发送端1次send,而接收端要8次receive,最后一个receive既有这个消息的结束内容,也有下一个消息的开始内容,你既然是知道第一个消息的长度,自然就知道第8次receive的数据中多少字节是第一个消息的、多少字节是下一个消息的。
冰冷的小爪 2016-07-11
  • 打赏
  • 举报
回复
引用 4 楼 deathyuxue 的回复:
[quote=引用 3 楼 xuzuning 的回复:] Remoting比较方便,大部分事情都替你完成了 自己用 TCP 也可以,传递的应是序列化后的对象(字符串)
我现在用一个类把我要传递的数据封装起来,然后序列化再发送到客户端,我先发流的长度,再发流中的数据,但是这样如果产生粘包导致接收不到正确的流长度应该怎么处理???[/quote] 去查查校验码,一通百通
deathyuxue 2016-07-11
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
Remoting比较方便,大部分事情都替你完成了 自己用 TCP 也可以,传递的应是序列化后的对象(字符串)
我现在用一个类把我要传递的数据封装起来,然后序列化再发送到客户端,我先发流的长度,再发流中的数据,但是这样如果产生粘包导致接收不到正确的流长度应该怎么处理???
xuzuning 2016-07-11
  • 打赏
  • 举报
回复
Remoting比较方便,大部分事情都替你完成了 自己用 TCP 也可以,传递的应是序列化后的对象(字符串)
Forty2 2016-07-11
  • 打赏
  • 举报
回复
TCP,或者Remoting都可以,TCP的扩展性好一些(比如AB未来可以放在不同的机器上)。 用TCP传图像,你一样可以用前缀。比如image=56789\n,其中\n是换行符号,或其他非数字分割符号。

111,129

社区成员

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

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

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