ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:168.93KB ,
资源ID:26271632      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26271632.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Winsock的主从式通信vb60系统设计讲解.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于Winsock的主从式通信vb60系统设计讲解.docx

1、基于Winsock的主从式通信vb60系统设计讲解第一章 需求分析1.1课程设计的目的 此次的课程设计是通过主从式通信来了解和掌握简单的通信协议,是作为本学期学习嵌入式Linux网络体系结构设计与TCP/IP协议栈的一次实际应用,有助于深入的了解通信协议的具体实现方式。这次的课程设计目的是加深对所学知识的了解和掌握,比如TCP协议和UDP协议的所用场合和不同之处;学习到对巡回检测系统的设计方法;同时自己学习了解和掌握对VB开发环境的一些基本的简单的常识,当然也增强了动手能力,为今后的设计做铺垫。1.2系统实现的具体功能 巡回检测是计算机远程监控系统的一种工作模式。计算机远程监控系统通常由主站和

2、分站构成,是典型的主-从式通信系统。正常情况下,巡回检测模式采用一问一答的方式进行,当分站发生异常时可主动上报(例如报警)。具体要求如下:1. 设1个主站(Server)2. 设8个分站(Client,也可少于8个,但必须多于3个)3. 系统应设置巡检周期和分站采样时间间隔4. 系统的工作模式为:自动巡检+主动上报5. 可指定(供参考):远程主机地址:127.0.0.1;(主站和分站)本地端口号:10000;(主站)1000110008;(分站)6. 分别设计主站(Server)通信程序和分站(Client)通信程序,界面如示例所示。7. 建议使用VB6.0或VC+编程,也可以用其它编程环境实

3、现。1.3系统的主要特点本设计主站是主动呼叫方,主站按周期向各个从站端口发送信息,从站收到信息后作出应答。当从站发生异常时要主动向主站报告。从站程序可以同时打开多个。 基于VB6.0的UDP通信示,使用的控件对象有:标签(Label),文本框(Textbox),命令按钮(Command),通信(Winsock),形状(Shape),定时器(Timer)等几个控件。第1章 主从是通信概要2.1 主从式通信的原理 主从式多机通信即是指主机发送的信息可以传送到各个从机或指定的从机,而各个从机的信息只能发送给主机.主机采用查询方式接收发送数据,从机采用中断方式接收发送数据2.2 主从式通信的特点1、

4、传输方式灵活、速度快:1)系统传输平台采用采用工业以态网+现场CAN总线多主传输。即:根据矿的具体情况,可采用主从式RS485传输或TCP/IP以太网传输。2)通讯速率高,传输距离远,抗干扰和雷击能力强。由于系统采用光信号传输,改进了传统电信号传输时经常被雷击的情况,不需要传输线路避雷器。3)采用先进的多主并发通讯模式,系统检测速度快,实时性强;4)彻底突破了低速总线下的技术瓶颈,系统节点容量大大增加;5)能进行语音、数据、图象的综合传输,快速进行压缩及解压缩处理;6)系统支持冗余环网工作模式,故障自愈时间短,通信可靠;主从式和多主式煤矿监控系统性能比较见下: 分站容量 传输速率 实时性 传输

5、距离 稳定性 兼容性 传输信息主从式系统 64台 2400bps =30s =15km 一般 差 数据多主系统 1000台 10/100Mbps 2s bind()-listen()-accept()那么在accept()完了后,版主们说在Server端将生成一个新的套接字,然后Server将继续进入accept()状态,版主们该如何用这个新的套接字来进行与Client端的通信呢,这就用到了recv()函数,而Client端则是通过send()函数来向服务器发信息的。 在客户端也是采取类似的过程,其调用Winsock的过程如下: socket()-connect()-send() 首先建立一个

6、socket,然后用connect()函数将其与Server端的socket连接,连接成功后调用send()发送信息。2.4 Winsock编程的实现方法 本次设计是利用Winsock控件对象实现基于UDP通信协议的主从式通信,为了传输数据,首先要设置客户计算机的LocalPort属性。然后,服务器计算机只需将RemoteHost设置为客户计算机的Internet地址,并将RemotePort属性设置为跟客户计算机的LocalPort属性相同的端口,并调用SendData方法来着手发送信息。于是,客户计算机使用DataArrival事件内的GetData方法来获取已发送的信息。主要使用的方法有

7、SendData方法和GetData方法,在调用SendData方法来着手发送信息时要先设定相同的端口;当传进UNICODE字符串并在网络上发送出去之前,将转化成ANSI字符串。GetData方法是获取当前的数据块并将其存储在变体类型的变量中。通常与DataArrival事件并用。2.4.1创建第一个UDP服务器端确定远程主机属性为对方的计算机名主站为UPDA;确定远程主机属性为第二个控件的本地端口属性;调用约定方法指定要被使用的本地端口。创建一个的UDP连接端创建一个标准EXE工程;将默认窗体命名为主站;在窗体中添加一个Winsock控件,命名为UDPA;在属性(Properties)页,单

8、击协议(Protocol),改为UDPProtocol;添加5个文本框控件窗体中,分别命名为txtSend,txtOutput,Text2,Text3,Text5;添加8个shape控件窗体中,Index属性设置为1,2,3,4,5,6,7,8。添加4个Command控件窗体中,定义清除数据,发送,开始,结束。2.4.2创建第二个UDP连接端添加标准窗体到工程中;将窗体名改为从站;将窗体标题改为从站;在窗体中添加一个Windsock控件并命名为UDPB;在属性页中单击Protocol,改为UDPProtocol;添加5个文本框到窗体中,分别命名为txtSend和txtOutput,Text1,

9、Text2,Text3;添加2个Command控件窗体中,定义清除数据,发送数据。2.5TCP/IP协议 2.5.1TCP/IP的通讯协议简要介绍一下TCP/IP的内部结构,TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(UserDatagramProtocol)协议、ICMP(InternetControlMessageProtocol)协议和其他一些协议的协议组。2.5.2 TCP/IP - 整体构架 TCP/IP协议并不完全符合OSI

10、的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。2.6 UDP协议 UDP( User Datagram Protocol)是一种无连接协议不保证可靠的传输层协议。与TCP操作不同,计算机间

11、并不需要建立一个连接,同时,一个UDP应用可同时作为应用的客户或服务器方。 由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询-应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面

12、临着更大的危险。2.7 为了提高效率通常采用UDP作为实时数据传输协议的原因通常,你要创建的应用程序的类别就决定了你要选择的协议。当发送或接收数据时,该应用程序如果需要从服务端或客户端获得认证,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。要发送的数据量大(就像图片、声音文件之类)一旦建立了连接,TCP协议就会保持连接并保证数据的完整性。但是,这种连接会占用的更多的处理器资源,成本也会更高一些。数据是陆续传输的,还是一次全部传完呢?如果要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。UDP协议也更适合于发送小量数据。TCP是一种面向连接的的通信协

13、议,UDP(用户数据文报协议)是一个无连接协议。因此在工业应用中,为了提高效率通常采用UDP作为实时数据传输协议。第2章 总体设计3.1系统方案本次设计是实现1个主站和8个从站的通信,主站的端口号为10000,1到5号从站的端口为1000110008。结构如下图所示:图3.1主从站结构图主站每隔一段时间从1号从站到5号从站依次发送一次巡检信息,从站收到信息就做出相应的回应,在从站之间还有一定的间隔。流程图如下: 图3.2主从站流程图第3章 详细设计4.1 系统界面 主站的工作显示界面,如下图4.1所示:图4.1主站工作设计界面从站工作显示界面如图4.2所示:图4.2从站工设计作界面4.2 部分

14、代码及说明4.2.1主站主动向从站发送数据模块Private Sub Command1_Click()UDPA.RemoteHost = 127.0.0.1UDPA.RemotePort = 10000 + Text3.TextUDPA.SendData txtSend.TextEnd Sub主要作用:此代码由Command1_Click()事件触发,根据 Text3Text中的用户输入主动设置UDPA.RemotePort,并发送txtSend.Text中用户输入的字符串到相应的端口,然后清空输入框和端口框的数据。4.2.2主站UDPA_DataArrival 事件Private Sub U

15、DPA_DataArrival _(ByVal bytesTotal As Long)If bytesTotal 2 ThenDim strData As StringOn Error Resume NextUDPA.GetData strDatatxtOutput.Text = txtOutput.Text & Chr(13) & Chr(10) & strDataShape1(UDPA.RemotePort - 10000).FillColor = &HC000&End IfEnd Sub主要作用:如果收到的字节大于2执行GetData并将收到的数据在txtOutput文本框中输出,并将相

16、应的Shape1(Winsock1.RemotePort-10001)图形填充为红色。4.2.3从站UDPBDataArrival 事件Private Sub UDPB_DataArrival _(ByVal bytesTotal As Long)If bytesTotal 2 ThenDim strData As StringUDPB.GetData strDatatxtOutput.Text = txtOutput.Text & Chr(13) & Chr(10) & strDataUDPB.RemoteHost = 127.0.0.1UDPB.RemotePort = 10000UDPB

17、.SendData Text1.Text & 号站应答End IfEnd Sub主要作用:当从站接收到数据大于2时执行GetData方法,并将接收到的数据在txtOutput中显示,还要在接受到主站发来的数据后向主站发送应答UDPB.SendDataLabel4.Caption&号站应答。4.2.4巡回检测代码块Timer事件Private Sub Timer1_Timer()For a = 10001 To 10008 UDPA.RemoteHost = 127.0.0.1 UDPA.RemotePort = a Shape1(UDPA.RemotePort - 10000).FillCol

18、or = &H0& UDPA.SendData 主站巡检 & a - 10000 & 号站 DoEvents Sleep 10000Next aEnd Sub主站巡检& RPort - 10000&号站DoEventsSleep100NextiEndSub每隔Timer1.Interval时间执行一次改代码块,每次执行时利用For循环将UDPA.RemotePort设置为从10001到10008间的数,并且执行UDPA.SendData主站巡检&a-10000&号站向当前端口发送数据。循环体每执行一次Sleep300,每5s钟检测一次。4.3 系统运行部分截图4.3.1 主站自动巡检 主站作自

19、动巡检时工作截图,点击开始按钮主站自动巡检,当前有1,3,8三个从站在,当主战巡检时,1,3,8分别响应如图4.14.4图所示:图4.1主站每5秒钟检测一次图4.2从站1被检测到并作出响应图4.3从站3被检测到并作出响应图4.4从站8被检测到并作出响应4.3.12 主站手巡检当主站进行手动巡检时,首先要在远程端口处先设置好从站端口号(端口号为18任意数字)和传送命令(大于2个字节)如图4.5所示,然后点击发送按钮从站会做出响应如图4.54.6所示:图4.5主站手动巡检图5.6主站手动巡检从站1作出响应第4章 主从是通信中的冲突 主动上报就是从站发生异常时主动向主站发送相应的数据,便于主站及时的

20、采取相应的措施来解决异常。但是,主动上报也是有一定的弊端的,当多台主机同时发生异常,又同时上报的话,就可能产出冲突。主站不能同时受理这些上报信息。解决这种冲突可以采取分割时间片的方法,为每个从站分配一个时间片,在相应从站的时间片内产生的异常可以上报,主站予以处理;反之,不允许上报,当然主站也不会处理的,要等到下一个时间片到来的时候才可以上报,这样才可以解决此冲突。第6章 代码6.1UDPA主站设计的代码Private Declare Sub Sleep Lib kernel32 (ByVal dwMilliseconds As Long)Private Sub Command1_Click()

21、UDPA.RemoteHost = 127.0.0.1UDPA.RemotePort = 10000 + Text3.TextUDPA.SendData txtSend.TextEnd SubPrivate Sub Command2_Click() Timer1.Enabled = TrueEnd SubPrivate Sub Command3_Click()Timer1.Enabled = FalseFor RPort = 10001 To 10008 UDPA.RemoteHost = 127.0.0.1 UDPA.RemotePort = RPort Shape1(UDPA.Remote

22、Port - 10000).FillColor = &H0&Next RPortUDPA.CloseEnd SubPrivate Sub Command4_Click()txtOutput.Text = End SubPrivate Sub Form_Load()With UDPARemoteHost = 127.0.0.1.Bind 10000strvar1 = InputBox(在下面文本框中输入主站本地端口号, 设置本地端口号)Timer1.Enabled = 0End WithEnd SubPrivate Sub Timer1_Timer()For RPort = 10001 To 1

23、0008 UDPA.RemoteHost = 127.0.0.1 UDPA.RemotePort = RPort Shape1(UDPA.RemotePort - 10000).FillColor = &H0& UDPA.SendData 主站巡检 & RPort - 10000 & 号站 DoEvents Sleep 100Next RPortEnd SubPrivate Sub txtOutput_Change()txtOutput.SelStart = Len(txtOutput.Text)End SubPrivate Sub UDPA_DataArrival _(ByVal bytes

24、Total As Long)If bytesTotal 2 ThenDim strData As StringOn Error Resume NextUDPA.GetData strDatatxtOutput.Text = txtOutput.Text & Chr(13) & Chr(10) & strDataShape1(UDPA.RemotePort - 10000).FillColor = &HC000&End IfEnd Sub6.2UDPB从站设计的代码Private Sub Command1_Click()UDPB.SendData txtSend.TextEnd SubPrivate Sub Command2_Click()txtOutput.Text = End SubPrivate Sub Form_Load()strvar = InputBox(在下面文本框中输入本地站口号18, 设置本地站号)Tex

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1