按照你的说法,随便一个支持“双向通讯”的(tcp)服务器程序都是干这个事情的。你可能还是在基本的编程语句上纠结呢,还没有到产品研发那一层。

解决方案 »

  1.   

    你可以看看msdn上入门的 TcpListener 的例子,虽然msdn上的关于通讯的例子都非常简单、不实用,但是回答你的问题绰绰有余。只要用几行代码启动TcpListener对象实例,它就会监听客户端访问,然后就会与每一个客户端建立一个TcpClient连接,通过这个TcpClient.GetStream() 方法可以得到一个支持双向读写字节流数据的 Stream 对象,随时可以(异步或者同步)读数据或者(同步或者异步)写数据。这是服务器端。而客户端,你的各种pc设备、PLC+PLU设备之类的,直接使用tcp方式访问服务器,就能随时推送数据给服务器、随时收到服务器发来的数据。这是双工双向通讯的。至于处理复杂的业务,那需要你自己定义通讯信令格式,并有一个GateWay程序将.net对象与通讯所用的数据流进行序列化、反序列化。比如说通讯中传送json格式的文本信息。这是你自己要做的比较高层的设计,而底层则比较简单,跟你的业务无关。
      

  2.   

    所谓“多层”,这可能是指NAT路由机制。但是服务器总是放在一个“公共”的位置,所有客户端都可以访问到。因此客户端访问服务器端,然后长连接。如果断线,客户端会尝试重新连接服务器。服务器从来不会去主动连客户端。
      

  3.   

    你做的这个东西应该是个server,而所谓上层设备其实是clint
    你不应该考虑如何主动将数据发到clint,而是上层设备来获取数据
    否则如果你的上层设备有多个,或IP不固定,你逻辑实现起来会异常复杂
      

  4.   

    非常感谢各位的建议,白天上不了网,只能晚上回复了。
    是我搞复杂了,其实是这样的,业务程序把获得的数据保存到本地消息队列,有新消息时,通信程序从消息队列读取数据,通过socket连接发送给其它计算机。