C# TCP/IP 网络通信数据接收与转发

u010018424 2015-09-14 09:10:24
如图所示,N个采集模块有N个IP地址。工控机与N个采集模块连接,负责接收采集到的数据,并接收远程服务器命令,将数据转发至远程服务器。
我想问他们之间的连接流程。是工控机(IP.x)作为客户端,而远程机(IP.y)和采集模块(IP.1-N)都作为服务器吗?怎么设计这个过程或通信模式?

...全文
1400 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Darran 2015-09-15
  • 打赏
  • 举报
回复
这个我弄过,x向各采集模块发送命令然后读取模块返回的数据,同时x监听一个端口,一旦y通过该端口与x发起连接索要数据,x便返回y想要的数据。 x与各个模块之间的协议应该是定好的,你可以按照设备支持的协议来做,x和y之间,自己设定好指令协议即可。
tcmakebest 2015-09-15
  • 打赏
  • 举报
回复
如果是自己编程,作为客户机或者服务器都可以的,但一般采集模块都是确定好的作为客户机或者服务器,另一方的软件只能配合.
u010018424 2015-09-14
  • 打赏
  • 举报
回复
@Forty2 @Z65443344 @本拉灯 @sp1234 首先感谢各位的回答,单个的我已经完成了,如下贴 http://bbs.csdn.net/topics/391823229 只不过我把工控作为了调度室的上位机。是我描述的不够清楚。 本帖中的远程实际就是调度室,基本如5#@以专业开发人员为伍 所述。
  • 打赏
  • 举报
回复
当然到底做什么软件角色,实际上也要看具体所实现的业务协议,并不是随便看了网络布线图就下最终的判断的。如果没有细节,就不会深入。 一般来说最简单的考虑,对于 IP.x 来说,实现几个服务功能供其它程序来远程访问,这是没有问题的。但是一般来说设备不会去浪费自己的内存、时间去当作客户端去访问什么上位机服务的,设备通常只被动地提供“一问一答”的简单服务。因此你的 IP.x 中写上几十行代码去提供客户端查询功能,也就是等着类似 IP.y 类似的程序来请求了。
  • 打赏
  • 举报
回复
IP.x 是一个长期运行的前置服务器,数据的可靠性和最终真实性就靠它了,因为各个设备本身可能有容量、可靠性等等限制,远远不及 IP.x。(比如说1个月内)如果任何数据在其他机器上丢失了,都要求在 IP.x上 能够找回来。 在设计 IP.x 时不依赖于 IP.y(或者类似的各种各样不同目的的查询终端,或者数据同步备份中心),这是常见的一种扩展方式。比如说随便一个asp.net程序员可能都会在 IP.x 上创建几个数据服务,用来查询数据。 IP.x 去访问设备,这其实也是类似的考虑。以一般的程序员的“想象的省力的方式”,自然是希望所有的设备都当作客户端来连到自己的服务器上。而设备凭什么就会连到自己的服务器程序上呢?他就又来要求人家给他写代码、而自己不会写了。所以真实的情况是——设备通常是独立服务,而你的上位机要作为去作为客户端程序去逐一访问设备。这个系统中,可能有250个服务器,而只有一个客户端来访问它们。
  • 打赏
  • 举报
回复
另外要注意的是,你这个图往它描述的是星形网络连接,它不是软件进程之间的“客户端-服务器”关系。用这个图,就会误导开发者。 这个图是给那些干体力活儿、负责给网络接线接交换机的人看的。软件人员看的不是这个图,软件的图根本不需要出现“交换机”这么一个东西!
  • 打赏
  • 举报
回复
从这个例子可以看到,许多人人云亦云的所谓“远程服务器”之类的词儿,容易产生歧义。实际的程序设计上的“服务器、客户端”的概念是依据实际的通讯关系的,跟一般人的通俗地叫法可能有所区别。遇到这种情况你最好把它重新命名为“调度室上位机”之类的名字,避免先入为主地去说什么“服务器、客户端”的词儿。
  • 打赏
  • 举报
回复
按照你描述的逻辑,IP.x 是所有采集设备的客户,而 IP.y 是 IP.x的客户。IP.x 是 IP.y的服务,而所有设备是 IP.x的服务。 也就是说,说有设备都是独立的服务器。IP.x 访问所有设备。而远程服务器只是是一个客户机,它从来都不作为服务器使用。
於黾 2015-09-14
  • 打赏
  • 举报
回复
采集模块作为客户端也可,作为服务端也可,看你想怎么设计罢了 你先处理好一个采集,一个服务器,再想多个的 一个的还没着手开始做,想那么多有卵用
本拉灯 2015-09-14
  • 打赏
  • 举报
回复
原来你不会写代码呀。那说这么多没啥用的。
Forty2 2015-09-14
  • 打赏
  • 举报
回复
先从小问题做起。 建议你先尝试做“工控机”与一个采集模块的连接。然后你大概就知道该问什么了。
u010018424 2015-09-14
  • 打赏
  • 举报
回复
工控机和采集模块都在本地
本拉灯 2015-09-14
  • 打赏
  • 举报
回复
IP.x既当服务器,又当客户端的情况,,这不就是相当于网关么。只负责中转数据。 不过你要用Socket。那写起来就麻烦了,用第三方库吧FastSocket 应是你的菜。 网关无非就实列两个东西 Client 与Server同时在同一个进程中。。。
u010018424 2015-09-14
  • 打赏
  • 举报
回复
引用 12 楼 wyd1520 的回复:
大概明白了你要啥了,你这图误导他人。。。 你的IP.1....IP.n 这个应是下位机吧,还有那个交换机那东西是串口服务器吧。那你画的图就是错的,把IP.Y与串口服务器的线改成 IP.y与IP.X对接才是正确的。IP.y-IP.x用什么WebService ,WCF .Socket,Http这通信协议都可以,如果交持交互不多就用WebService,快些的就用WCF,当然要极质的就Socket了。 你应先把精力放在下位机-》串口服务器->IP.x使得IP.x都能取到下位机的数据。搞定这个后,对其他机子传输数据就容易多了,WebService ,WCF 这两个基本都是现成的。
恩,用的TCP/IP通信,第一个任务已完成,现在只剩最后对其他机子传输数据了,但是也要求实时数据。可能会出现IP.x既当服务器,又当客户端的情况。现在正在尝试实现这个想法
本拉灯 2015-09-14
  • 打赏
  • 举报
回复
大概明白了你要啥了,你这图误导他人。。。 你的IP.1....IP.n 这个应是下位机吧,还有那个交换机那东西是串口服务器吧。那你画的图就是错的,把IP.Y与串口服务器的线改成 IP.y与IP.X对接才是正确的。IP.y-IP.x用什么WebService ,WCF .Socket,Http这通信协议都可以,如果交持交互不多就用WebService,快些的就用WCF,当然要极质的就Socket了。 你应先把精力放在下位机-》串口服务器->IP.x使得IP.x都能取到下位机的数据。搞定这个后,对其他机子传输数据就容易多了,WebService ,WCF 这两个基本都是现成的。
u010018424 2015-09-14
  • 打赏
  • 举报
回复
引用 10 楼 diaodiaop 的回复:
所以基于LZ这2次问的问题 我大概可以了解到你要做什么.. 所以思路很重要..不用先去研究你所谓的"线程怎么用啦","tcp数据如何转发啦"之类的问题. 代码固然重要.但相对整个设计流程来说 那都是小事,因为业务设计的范围很大.所以一定要先弄清楚具体的流程. 对日后的编码也有很大的帮助,否则盲目的代码到最后问题出在哪你都不知道...
谢谢前辈回答,说的很有道理
by_封爱 版主 2015-09-14
  • 打赏
  • 举报
回复
所以基于LZ这2次问的问题 我大概可以了解到你要做什么.. 所以思路很重要..不用先去研究你所谓的"线程怎么用啦","tcp数据如何转发啦"之类的问题. 代码固然重要.但相对整个设计流程来说 那都是小事,因为业务设计的范围很大.所以一定要先弄清楚具体的流程. 对日后的编码也有很大的帮助,否则盲目的代码到最后问题出在哪你都不知道...
by_封爱 版主 2015-09-14
  • 打赏
  • 举报
回复
多个串口或者网口 连接一个设备 比如moxa的串口服务器. 那么 另外一个电脑 当作moxa的上位机 来负责接收这些串口上来的数据. 当然这工作是你完成的.. 至于你A电脑完成了之后 想把数据存在哪里那是你的事...什么远程只要ado就OK了, 所以N个串口作为客户端 moxa作为服务器(设备) 然后你写的"上位机" 作为设备的服务器... 然后你的"上位机"作为客户端 把数据传到远程服务器.....

110,537

社区成员

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

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

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