关于通信程序设计问题

bj-alex 2014-07-16 08:32:36
在一个多层环境中,设计一个通信程序,需要接收下层设备发送的数据包,也要接收上层设备发送的控制指令,并将下下层设备发送的数据保存,然后发送给上层设备,中间层的通信程序通过消息队列接收发送数据,请各位高手给个设计方案。
...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-07-17
  • 打赏
  • 举报
回复
你做的这个东西应该是个server,而所谓上层设备其实是clint 你不应该考虑如何主动将数据发到clint,而是上层设备来获取数据 否则如果你的上层设备有多个,或IP不固定,你逻辑实现起来会异常复杂
  • 打赏
  • 举报
回复
所谓“多层”,这可能是指NAT路由机制。但是服务器总是放在一个“公共”的位置,所有客户端都可以访问到。 因此客户端访问服务器端,然后长连接。如果断线,客户端会尝试重新连接服务器。 服务器从来不会去主动连客户端。
  • 打赏
  • 举报
回复
你可以看看msdn上入门的 TcpListener 的例子,虽然msdn上的关于通讯的例子都非常简单、不实用,但是回答你的问题绰绰有余。只要用几行代码启动TcpListener对象实例,它就会监听客户端访问,然后就会与每一个客户端建立一个TcpClient连接,通过这个TcpClient.GetStream() 方法可以得到一个支持双向读写字节流数据的 Stream 对象,随时可以(异步或者同步)读数据或者(同步或者异步)写数据。这是服务器端。 而客户端,你的各种pc设备、PLC+PLU设备之类的,直接使用tcp方式访问服务器,就能随时推送数据给服务器、随时收到服务器发来的数据。这是双工双向通讯的。 至于处理复杂的业务,那需要你自己定义通讯信令格式,并有一个GateWay程序将.net对象与通讯所用的数据流进行序列化、反序列化。比如说通讯中传送json格式的文本信息。这是你自己要做的比较高层的设计,而底层则比较简单,跟你的业务无关。
  • 打赏
  • 举报
回复
按照你的说法,随便一个支持“双向通讯”的(tcp)服务器程序都是干这个事情的。你可能还是在基本的编程语句上纠结呢,还没有到产品研发那一层。
bj-alex 2014-07-17
  • 打赏
  • 举报
回复
非常感谢各位的建议,白天上不了网,只能晚上回复了。 是我搞复杂了,其实是这样的,业务程序把获得的数据保存到本地消息队列,有新消息时,通信程序从消息队列读取数据,通过socket连接发送给其它计算机。
threenewbee 2014-07-16
  • 打赏
  • 举报
回复
方案不是三言两语可以回答你的。这个要结合需求、硬件、你期望的性能开销等等综合决定。

110,534

社区成员

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

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

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