




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖 北 大 学本 科 毕 业 论 文 (设 计) 题 目 vb网络编程 姓 名 任京京 学号 2006221105210037业年级 2006级电子信息工程专业 指导教师 刘干 职 称 副教授 2010年 04月 20日目 录绪论51 VB编程工具熟悉51.1 vb发展史51.2 vb图形化界面介绍51.3 vb数据类型及最简单语法71.3.1 数据类型71.3.2 常用两种语法72 winsock简介82.1 winsock功能简介82.2 winsock功能实现原理82.3 Vb中控件WINSOCK解析93. 局域网创建“聊天”应用程序思想103.1 选择通讯协议103.2 协议的设置103.2.1 TCP服务器的建立103.2.2TCP客户端的建立113.2.3 服务器接收多个连接请求113.2.4 使用UDP协议建立通信123.2.5 建立第一个UDP伙伴123.2.6 建立第二个UDP伙伴124 局域网聊天小程序运行结果13结论16参考文献17vb网络编程摘要为了满足小型局域网内部用户的简单快捷多人聊天要求,本课题以vb语言为基础来讨论tcp/ip相关协议与网络程序设计,学习运用服务器程序和客户端程序的建立及有关通信协议,winsock控件和windows API等来实现一款多功能聊天软件。由于本小聊天软件在局域网中文字聊天,数据流量小,而且局域网中数据传输误码率小,故winsock控件选择UDP通讯协议。只要知道双方的ip地址,双方协商通信端口,运用本程序就可以实现局域网中多方聊天的功能。绪论 Vb是windows操作系统下应用程序的一个大型开发环境,由于它强大的功能,容易掌握和使用方便等特点,从微软推出它以来,一直受到用户的青睐。Vb程序语言设计是在原有的BASIC语言的基础上发展起来的,它不仅继承了BASIC语言简单易学的优点,又增加了许多新的功能,它具有可视化的设计平台,使用面向对象的设计方法和事件驱动的运行机制,具有结构化得设计语言和开放的数据库功能和网络支持。Vb6.0为用户提供了基于图形界面的功能强大的开发环境。利用vb6.0可以直接调用函数库中的winsock空间来建立远程计算机链接,实现远程通信。1 VB编程工具熟悉1.1 vb发展史 Vb是visual basic的简称,是由美国微软公司于1991年开发的可视化的。面向对象和采用事件驱动方式的结构化高级程序设计语言,可应用于开发windows环境下的各类应用程序,它简单易学,效率高,且功能强大可以与windows专业开发工具sdk相媲美,在visual basic环境下,利用事件驱动的编程机制,新颖易用的可视化设计工具使用windows内部的广泛的应用程序接口api函数,动态链接库dll,对象的链接与嵌入ole,开放式数据链接odbc等技术,可以高效的,快速的开发windows环境下功能强大,图形界面丰富的应用软件系统。1.2 vb图形化界面介绍 VB6.0采用可视化的编程环境,它好学易用,运行VB6.0后,会出现如下图所示的窗口。那么新建一个VB的工程呢?在程序启动时出现的“新建工程”对话框中选择“标准EXE”并点击确定,就能直接新建一个工程,如果跳过了这个对话框则也可从“文件”菜单中选择“新建工程”下面一起来看看VB的编重新调出此对话框。 程环境,可以把它分为几个部分,每个部分都有自己特定的功能。其实VB这是通过这样一个界面把相近或同类的功能组合在一起的,它使我们在设计程序时能方便的控制程序的方方面面。 窗体的最上层是“VB 6.0的菜单”和“便捷工具按钮”,菜单中包含了所有的VB提供的功能的选项,而其中一些常用的功能或操作选项则被提取出来放在了“便捷工具按钮”中,通过点击这些快捷按钮可以加快程序开发的速度,下图标出了常见的工具按钮的作用。接着看看“VB的组件面板”和“窗体设计区域”,VB提供了方便的窗体设计区域,它位于整个编程窗口的中间。我们可以在这个区域中搭建出美观实用的程序界面,试着从“VB的组件面板”中找到“按钮CommandButton”,点击选中后,再到“窗体设计区域”的窗体上点一下,这时,窗体上会出现一个按钮,这样我们就把按钮添加到我们程序的界面中了。屏幕的右边有三个从上到下排列的小窗口,它们分别是:“VB工程管理器”:用来管理开发一个VB程序所需要的各种类型的窗体和模块,如左图是一个工程所包含的东西,窗体是一个程序表现在外面的界面、模块是程序内部使用的代码。当我们点击“添加窗体”便捷工具按钮后,左图的“VB工程管理器”中就会显示出新添加的窗体,这也就是“VB工程管理器”的功能,它使我们从总体上把握程序开发的各个部分。“组件属性窗口”:用来显示组件的属性,并允许我们修改,设定这些属性的值,我们在窗体设计区域的窗体上选中一个组件,以按钮为例,则在“属性窗口”中会列出它的属性,我们可以看到常用的“Name”、“Capition”、“Font”等等属性。“窗体布局窗口”:调整程序运行时,程序窗体在屏幕中的初始位置,把鼠标移到左图屏幕中的窗体上,这时鼠标会变成移动形状,拖动窗体,就设置好了运行时此窗体的位置。 最后就是“代码编辑区域”,当我们在“窗体设计区域”双击鼠标,就能弹出这个区域,可以看到一行行的VB程序显示在其中,我们可以修改,写入程序代码,来让程序实现一定的功能,它是整个程序设计的关键。 “代码编辑窗口”如下图的窗口,我们可以在其中输入或是修改程序的代码。1.3 vb数据类型及最简单语法1.3.1 数据类型VB中声明一个变量使用“Dim 变量名 As 变量类型”的方法,一般在程序中使用的到的变量都应该有变量声明,VB中的变量类型有以下几种: 数据类型说明Byte二进制数 Boolean 真假值 Integer 整数 Long长整型Single 实数 Double双精度型 Currency 货币 Date 日期和时间 Object 对象 String 字符串 Variant可变类型1.3.2 常用两种语法 计算机在运行程序的时候,执行语句的顺序是从上向下的。 有些简单程序可以只用单向流程来编写,但稍微复杂的程序就要靠控制语句来控制程序执行的流程。控制结构主要有两种,分支结构和循环结构。 分支结构:分支结构事实上是一种选择,在不同的条件下选择执行不同的程序段。实现分支结构的语句有很多,最常用的是ifthenelse。 循环结构:循环结构就是让电脑反复的执行某一程序段落干次。 用DoLoop可以循环重复执行一语句块,且重复次数不定。 在已知循环次数的条件下,用Fornext可以反复执行统一语句块。2 winsock简介2.1 winsock功能简介 Winsock是Windows下网络编程的规范,是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程,winsock提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。winsock规范定义并记录了如何使用API与Internet协议族(TCP/IP)连接,尤其要指出的是所有的winsock实现都支持流套接口和数据报套接口.应用程序调用winsock的API实现相互之间的通讯。winsock又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。2.2 winsock功能实现原理通信的基础是套接口(Socket),一个套接口是通讯的一端,在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程。套接口存在于通讯域中,通讯域是为了处理一般的线程通过套接口通讯而引进的一种抽象概念。套接口通常和同一个域中的套接口交换数据。套接口可以根据通讯性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接口间通讯。不过只要底层的通讯协议允许,不同类型的套接口间也照样可以通讯。用户目前可以使用两种套接口,即流套接口和数据报套接口。流套接口提供了双向的,有序的,无重复并且无记录边界的数据流服务。数据报套接口支持双向的数据流,但并不保证是可靠,有序,无重复的。也就是说,一个从数据报套接口接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。数据报套接口的一个重要特点是它保留了记录边界。对于这一特点,数据报套接口采用了与现在许多包交换网络(例如以太网)非常类似的模型。一个在建立分布式应用时最常用的范例便是客户机/服务器模型。在这种方案中客户应用程序向服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通讯时的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。这一套惯例包含了一套协议。它必须在通讯的两头都被实现。根据不同的实际情况,协议可能是对称的或是非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的TELNET。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被惊醒并且为客户提供服务对客户的请求作出适当的反应。虽然基于连接的服务是设计客户机/服务器应用程序时的标准,但有些服务也是可以通过数据报套接口提供的。 数据报套接口可以用来向许多系统支持的网络发送广播数据包。要实现这种功能,网络本身必须支持广播功能,因为系统软件并不提供对广播功能的任何模拟。广播信息将会给网络造成极重的负担,因为它们要求网络上的每台主机都为它们服务,所以发送广播数据包的能力被限制于那些用显式标记了允许广播的套接口中。广播通常是为了如下两个原因而使用的:1. 一个应用程序希望在本地网络中找到一个资源,而应用程序对该资源的地址又没有任何先验的知识。2. 一些重要的功能,例如路由要求把它们的信息发送给所有可以找到的邻机。被广播信息的目的地址取决于这一信息将在何种网络上广播。由于使用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口。 任何从winsock函数对IP地址和端口号的引用和传送给winsock函数的IP地址和端口号均是按照网络顺序组织的,这也包括了sockaddr_in结构这一数据类型中的IP地址域和端口域。考虑到一个应用程序通常用与时间服务对应的端口来和服务器连接,而服务器提供某种机制来通知用户使用另一端口。因此getservbyname()函数返回的端口号已经是网络顺序了,可以直接用来组成一个地址,而不需要进行转换。然而如果用户输入一个数,而且指定使用这一端口号,应用程序则必须在使用它建立地址以前,把它从主机顺序转换成网络顺序(使用htons()函数)。相应地,如果应用程序希望显示包含于某一地址中的端口号(例如从getpeername()函数中返回的),这一端口号就必须在被显示前从网络顺序转换到主机顺序(使用ntohs()函数)。由于Intel处理器和Internet的字节顺序是不同的,上述的转换是无法避免的,应用程序的编写者应该使用作为Windows Sockets API一部分的标准的转换函数,而不要使用自己的转换函数代码。因为将来的Windows Sockets实现有可能在主机字节顺序与网络字节顺序相同的机器上运行。因此只有使用标准的转换函数的应用程序是可移植的。在MFC中MS为套接口提供了相应的类CAsyncSocket和CSocket,CAsyncSocket提供基于异步通信的套接口封装功能,CSocket则是由CAsyncSocket派生,提供更加高层次的功能,例如可以将套接口上发送和接收的数据和一个文件对象(CSocketFile)关联起来,通过读写文件来达到发送和接收数据的目的,此外CSocket提供的通信为同步通信,数据未接收到或是未发送完之前调用不会返回。此外通过MFC类开发者可以不考虑网络字节顺序和忽略掉更多的通信细节。 在一次网络通信/连接中有以下几个参数需要被设置:本地IP地址 - 本地端口号 - 对方端口号 - 对方IP地址。左边两部分称为一个半关联,当与右边两部分建立连接后就称为一个全关联。在这个全关联的套接口上可以双向的交换数据。如果是使用无连接的通信则只需要建立一个半关联,在发送和接收时指明另一半的参数就可以了,所以可以说无连接的通信是将数据发送到另一台主机的指定端口。此外不论是有连接还是无连接的通信都不需要双方的端口号相同。2.3 Vb中控件WINSOCK解析作为这个CHAT程序的主打控件WINSOCK,我们来看看它的一些常用属性、事件和方法。利用WinSock控件可以与远程计算机建立连接,并通过用户数据文报协议 (UDP)或者传输控制协议 (TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。与 Timer 控件类似,WinSock 控件在运行时是不可见的。 它的主要用途有:1、创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。2、创建一个服务器应用程序,作为多个用户的数据的汇入点。3、创建“聊天”应用程序。WINSOCK的主要属性有:PROTOCOL(控制协议)属性,在这个例子中,我们将PROTOCOL属性设置为sckUDPProtocol。这个协议一般用于简单数据交换的情况,而如果我们要编写INTERNET应用程序,多采用TCP协议。 属性RemoteHost是远程主机的地址,LocalPort、RemotePort分别本地主机的端口和远程主机端口,对客户来说,该属性指定发送数据的本地端口,而对于服务器来说,这是用于侦听的本地端口,我们在设置这两个属性时必须保证两台主机的端口值符合下面规则,即主机1的LocalPort等于主机2的RemotePort值,同样主机1的RemotePort等于主机2的LocalPort值,这样才能保证两机通讯的正常进行。 LocalIP属性用于返回本地机器的 IP 地址,格式是 IP 地址加点的字符串 (xxx.xxx.xxx.xxx)。 在本例中我们用到了以下几个WINSOCK的方法: 在创建 UDP 应用程序时调用了 Bind 方法,这是必须的。Bind 方法的作用是为控件“保留”一个本地端口。例如,如果将控件绑定到1001 号端口,那么其它应用程序将不能使用该端口进行“监听”。该方法阻止其它应用程序使用同样的端口。SendData 方法用于发送一条数据给另一台主机,使用这个方法的语法是: WinSock.SendData 要发送的数据GetData 方法。当DataArrival事件出现时,代码调用 GetData 方法获取数据,并将数据存储在字符串变量中。使用语法是:WinSock.GetData 接收数据的变量 DataArrival事件:在本例中我们使用了DataArrival事件,DataArrival事件在当新数据到达时出现使用的语法为:object_DataArrival (bytesTotal As Long) DataArrival 事件的语法包含下面部分: object 对象表达式,其值是“应用于”列表中的对象。 bytesTotal Long型 ,可获取的数据总数量。 需要说明的是:如果没有获取一个 GetData 调用中的全部数据,则事件不会出现。只有存在新数据时才激活事件。可随时用 BytesReceived属性检查可用的数据量。 3. 局域网创建“聊天”应用程序思想3.1 选择通讯协议 在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态: (1) TCP 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。 (2) UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。 (3)到底选择哪一种协议通常是由需要创建的应用程序决定的。下面的几个问题将有助于选择适宜的协议: 在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息,如果需要,使用 TCP 协议,在收发数据之前先建立明确的连接。数据量是否特别大(例如图象与声音文件)在连接建立之后,TCP 协议将维护连接并确保数据的完整性。不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。数据发送是间歇的,还是在一个会话内,例如,如果应用程序在某个任务完成的时候需要通知某个计算机,UDP协议是更适宜的。UDP 协议适合发送少量的数据。 3.2 协议的设置 在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代码来设置 Protocol 属性,如下所示: Winsock1.Protocol = sckTCPProtocol3.2.1 TCP服务器的建立(1)新建“标准EXE”工程。(2)在窗体上放人一个winsock控件,并将它的名字改为:tcpServer。(3)在窗体上放两个TextBox控件。(4)代码及注释如下:Option ExplicitPrivate Sub Form_ Load()tcpServerLocalPort=1100 将LocalPort属性设置为一个整数。tepServerListen Winsock在程序启动时监听端口1100。EndSubPrivate Sub tcpServer_ ConnectionRequest(Byval request ID As Long) 接收到对方连接请求触发这个事件。If tcpServerStatesckdose Then tcpServerClose 使收到对方连接请求之前保持关闭状态。tcpServerAccept requestlD tcpServer自己接收连接请求,与客户端Socket建立连接。EndSubPrivateSubtcpServer_ DataArfival(By Val bytes Total As Long)Dim str As StringtcpserviceGetData strtxtOutpuLText=str 在名为txtOutput的文本框中输出接收到的信息。End SubPrivate Sub txtSendData_Change()tcpServerSendData txtSendDataText 将名为txtSendData文本框中的内容传递给对方。EndSub3.2.2TCP客户端的建立(1)在工程中添加一个新的窗体,在窗体上添加一个Winsock,并将其命名为tcpClient。(2)在窗体上添加4个TextBox控件和2个CommandBuUon控件。3.2.3 服务器接收多个连接请求一般来说,客户端是不止一个的,如果每一个客户端都使用一个端口连接时,那么有上百个或更多的客户时就需要许多个Wnsock控件与之相对应。其实可以通过创建控件数组,使用一个控件也可以同时接收多个连接请求。利用这种方法。不需要关闭连接。而只需要创建新的控件实例(通过设置其索引属性)。然后在新的实例上调用Accept方法。下面代码中假设窗体上有一个名为sckServer的Winsock控件,它的Index属性被设置为0,因此该控是控件数组的一部分。Private intMax As Lo ngPrivate Sub Form_ Load()intMax=0sekServer(0)LocalPort=1 1 10sekServer(0)ListenEnd SubPrivate Sub sckServer ConnectionRequest (Index As Integer,ByValrequestlD As LoI1g)IfIndex=0ThenintMax=intMax +1Load sckServer(intMax)sckServer(intMax)LocalPort=0在计算机之间常用端口0来动态地建立连接。在这种情况下,控件将选择一个随机端口。建立连接之后,这就是用于TCP连接的本地端口。sckServer(intMax)Accept requestldLoad txtData(intM“)EndIfEnd Sub3.2.4 使用UDP协议建立通信 UDP(userDatagramProtoco1)是一种无连接协议,与TCP不同,计算机之间并不需要建立一个连接,一个UDP应用可同时作为应用的客户或服务方。由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。在TCP应用中,一个Winsock控件必须明确地设置成“监听”,而其他Winsock控件则必须使用Connect方法来初始一个连接。 使用UDP协议,在两个Winsock控制问进行数据的发送,在连接的两端必须完成以下3步:第一,设置RemoteHost属性为另一台计算机的名称。第二,设置RemoteHost属性为第二个Winsock控件的LocalPort属性的值。第三,调用Bind方法,指定使用的LoalPort。3.2.5 建立第一个UDP伙伴(1)创建一个新的标准工作。(2)在窗体上放入一个Winscok控件,并将其命名为udpPeerA。(3)在“属性”页上,单击“协议”修改为UDPProtocol。(4)在窗体中添加两个TextBox控件。(5)打开窗体代码,分别在相应的事件下输入以下代码:Private Sub Form_Load()With udpPeerARemoteHost=PeerBRemoteHost:1010 连接的端口号Bind 1011 绑定到本地的端口号EndWithEnd SubPrivate Sub at,Send_ Change()udpPeerASendData txtSendTextEI1d SubPrivate Sub udpPeerA_ DataArrival(ByVal bytesTotal As Long)Dim strData As StringudpPeerAGetData strDatatxtOutputText=strDataEnd Sub3.2.6 建立第二个UDP伙伴(1)在工程中添加个窗体。(2)在窗体上放入一个Winscok控件,并将其命名为udpPeerB。(3)在“属性”页上,单击“协议”修改为UDPProtocol。(4)在窗体中添加两个TextBox控件。(5)打开窗体代码,分别在相应的事件下输入以下代码:Private SubForm Load()With udpPeerBRemoteHost=PeerARemoteHost=1011 连接的端口号Bi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国甜八宝数据监测报告
- 快递考试题目及答案
- 空中乘务考试题及答案
- 果蔬坚果加工工岗位操作技能考核试卷及答案
- 炼钢准备工专项考核试卷及答案
- 2025年中国多功能平板跑步机数据监测研究报告
- 矿用发电车操作工基础考核试卷及答案
- 综合布线装维员上岗考核试卷及答案
- 精神控制考试题及答案
- 金蝶软件考试题及答案
- 桩基础平法施工图(平法施工图识读)
- GB/T 9113-2010整体钢制管法兰
- GB/T 23338-2018内燃机增压空气冷却器技术条件
- 癫痫的急救与护理课件
- 海姆立克急救法完整版本课件
- 国家地表水环境质量监测网采测分离实施方案课件
- 控压钻井技术及实践培训讲义工艺课件
- 厚度仪点检表
- 北京市水利工程维修养护定额
- 自然拼读法在小学英语教学中的应用的实践研究
- 无领导小组面试评分表模板
评论
0/150
提交评论