1 / 48

网络应用程序设计方法

网络应用程序设计方法. 第 8 章. 8.1 网络聊天程序任务 8.1.1 任务描述 VB 提供了一系列的网络编程控件,利用它们,网络编程将成为一件快乐而简单的工作。 VB 网络控件主要有三种: ( 1 ) Winsok 控件 主要用于编制基于 TCP/IP 或 UDP 协议的网络应用程序。 ( 2 ) Internet Transfer 控件 主要以来传输文件,执行 FTP 命令以及登录服务器等。 ( 3 ) WebBrowser 用于创建浏览器

megan
Download Presentation

网络应用程序设计方法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 网络应用程序设计方法 第8章

  2. 8.1 网络聊天程序任务 8.1.1 任务描述 VB提供了一系列的网络编程控件,利用它们,网络编程将成为一件快乐而简单的工作。 VB网络控件主要有三种: (1)Winsok控件 主要用于编制基于TCP/IP或UDP协议的网络应用程序。 (2)Internet Transfer控件 主要以来传输文件,执行FTP命令以及登录服务器等。 (3)WebBrowser用于创建浏览器 本节先介绍Winsok控件。

  3. 在网络编程中最常用的方案是客户机/服务器模式(Client/Server,简称C/S)。这种模式包含客户机和服务器两类应用程序。其中客户应用程序向服务器请求服务,而服务程序通常在一个众所周知的地址侦听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户提出了连接请求。此时,服务持续将被唤醒,并对客户的请求作出适当的反应。在网络编程中最常用的方案是客户机/服务器模式(Client/Server,简称C/S)。这种模式包含客户机和服务器两类应用程序。其中客户应用程序向服务器请求服务,而服务程序通常在一个众所周知的地址侦听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户提出了连接请求。此时,服务持续将被唤醒,并对客户的请求作出适当的反应。

  4. 聊天服务程序:由客户端和服务端两个程序组成,采用Winsok控件开发。这两个程序可以在同一台计算机上运行,也可以在网络上不同的计算机上运行。整个系统的运行机制是:聊天服务程序:由客户端和服务端两个程序组成,采用Winsok控件开发。这两个程序可以在同一台计算机上运行,也可以在网络上不同的计算机上运行。整个系统的运行机制是: 第一步:建立连接 主要过程是:由客户端程序向服务端程序发出连接请求,服务端程序收到并接受连接请求,至此客户机与服务器创建了数据交流通道。 第二步:开始聊天 主要过程是:在客户机的“发送的信息”文本框中输入文字时,服务器端的“收到的信息”文本框中就会实时地显示相同的文字,反之亦然。

  5. P215 习题 一、填空题 1. Winsock控件主要用来编制TCP/IP或协议的通话程序。 答案:UDP 2. 在网络编程中最常用的方案是。 答案:客户机/服务器程序(Client/Server)

  6. P215 习题 三、问答题 2.简述网络聊天程序的运行过程。 答:网络聊天程序的运行过程是: 第一步:建立连接 主要过程是:由客户端程序向服务端程序发出连接请求,服务端程序收到并接受连接请求,至此客户机与服务器创建了数据交流通道。 第二步:开始聊天 主要过程是:在客户机的“发送的信息”文本框中输入文字时,服务器端的“收到的信息”文本框中就会实时地显示相同的文字,反之亦然。

  7. 8.1.2. 服务器的界面设计 1.创建一个“标准 EXE”工程,选中“工程”菜单的“部件”,在控件中找到Microsoft Winsock Control并将其选中。 2.将Form1的名称改为frmSvr,并在其中添加两个命令按钮(Command1的Caption属性为“退出”,Command2的Caption属性为“发送”)。 3.在窗体是添加三个TextBox控件,其名称分别为txtServerIP,txtSend和txtReceive。 4.在窗体上添加一个Winsock控件,将其Protocol(协议)属性设置为0(即sckTCPProtocol)。

  8. 8.1.3 服务器程序代码设计 Private Sub Form_Load() '设置侦听端口 WinsockServer.LocalPort = 10001 '读取服务器的IP地址 TxtServerIP.Text = WinsockServer.LocalIP '开始侦听 WinsockServer.Listen End Sub Private Sub Command1_Click() '点击“退出”按钮后关闭应用程序 Unload Me End Sub

  9. 8.1.3 服务器程序代码设计 Private Sub Command2_Click() '只要txtSend文本框的内容写好以后就由WinsockServer控件发送 WinsockServer.SendData TxtSend.Text End Sub Private Sub WinsockServer_ConnectionRequest(ByVal requestID As Long) '当收到连接请求时,Winsock处于侦听状态 '此时应该使用Close方法关闭Winsock,然后使用Accept方法接受连接请求 WinsockServer.Close WinsockServer.Accept requestID End Sub

  10. 8.1.3 服务器程序代码设计 Private Sub WinsockServer_DataArrival(ByVal BytesTotal As Long) '当客户端有信息发送来时,利用WinsockServer控件的GatData方法读取数据 '并将其显示在txtReceive文本框中 Dim MyStr As String WinsockServer.GetData MyStr TxtReceive.Text = MyStr End Sub

  11. 8.1.4 客户机程序界面设计 1.创建一个新的“标准 EXE”工程,并添加Winsock 控件。 2.将Form1的名称改为frmClt,并在其中添加两个命令按钮(Command1的Caption属性为“退出”, Command2的Caption属性为“连接服务器” ,Command3的Caption属性为“发送”)。 3.在窗体是添加四个TextBox控件,其名称分别为txtClientIP,txtServerIP,txtSend和txtReceive。 4.在窗体上添加一个Winsock控件,将其Protocol(协议)属性设置为0(即sckTCPProtocol)。

  12. 8.1.4. 客户机的程序代码设计 Private Sub Form_Load() '设置聊天服务器的侦听端口 WinsockClient.RemotePort = 10001 '读取本机的IP地址 txtClientIP.Text = WinsockClient.LocalIP End Sub Private Sub Command1_Click() '点击“退出”按钮后关闭应用程序 Unload Me End Sub

  13. 8.1.4. 客户机的程序代码设计 Private Sub Command2_Click() '根据txtServerIP文本框中输入的服务器IP,连接聊天服务器 WinsockClient.RemoteHost = txtServerIP.Text WinsockClient.Connect End Sub Private Sub Command3_Click() '输入txtSend文本框的内容后由WinsockServer控件发送 WinsockClient.SendData txtSend.Text End Sub

  14. 8.1.4. 客户机的程序代码设计 Private Sub WinsockClient_Connect() '如果与服务器连接成功,则向用户提供下列信息 MsgBox "你成功地与聊天服务器进行了连接", vbInformation End Sub Private Sub WinsockClient_DataArrival(ByVal BytesTotal As Long) '当服务器有信息发送来时,利用WinsockClient控件的GatData方法读取数据 '并将其显示在txtReceive文本框中 Dim MyStr As String WinsockClient.GetData MyStr txtReceive.Text = MyStr End Sub

  15. 演示聊天程序

  16. 8.2 Winsock控件及网络应用程序设计基础 Winsock控件是建立在TCP协议的基础上,能够完成远程计算机间的通信,用途非常广泛。即使我们对TCP/IP,TCP这些知识不太熟悉,只要理解了网络应用程序设计的一般原理,并对Winsock的主要属性、方法和事件有所了解,也可以在很短时间内创建一个简单的网络通信程序。

  17. 8.2.1 Winsock控件的主要属性 Winsock控件主要有八个属性: 1. BytesReceived属性:返回接收到的数据。通常用GetData方法来获取这些数据。 2. LocalHostName属性:返回本地计算机的名称。 3. LocalIP属性:返回本地计算机的IP地址。 4. LocalPost属性:返回或者设置所用的端口,如果设置为0,则使用随机端口。 5. Protocol属性:返回或设置Winsock所用的协议(TCP或UDP)。 6. RemoteHostName属性,返回或设置远程计算机的名称。 7. RemoteHostIP属性,返回远程计算机的IP地址。 8. State属性:返回Winsock控件的当前状态。

  18. Winsock控件的State属性

  19. P215 习题 二、填空题 3. 如果希望得到本地计算机的IP地址,可以使用Winsock控件的属性。 答案:LocalIP 4. Winsock控件的BytesReceived属性返回接收到的数据,通常使用方法来获取这些数据。。 答案:GetData 3. 如果Winsock1.LocaPort=0,那么应用程序将。 答案:使用随机端口

  20. 8.2.2 Winsock控件的主要方法 Winsock控件的方法主要有六个: 1. Listen方法 语法: Winsock对象.Listen 作用:使服务器处于侦听状态,等待客户访问。 2. Connect方法 语法: Winsock对象.Connect[远程主机IP,远程端口] 作用:用于向远程主机发出连接请求。 3. Accept方法 语法: Winsock对象.Accept RequestID 作用:用于接受一个连接请求,其中RequestID是客户机发来的请求信号

  21. 8.2.2 Winsock控件的主要方法 Winsock控件的方法主要有六个: 4. SendData方法 语法: Winsock对象.SendData 数据 作用:用于发送数据 5. GetData方法 语法: Winsock对象. GetData 变量[数据类型[,最大长度] 作用:用来获得接收到的数据 6. Clcse方法 语法: Winsock对象.Close 作用:关闭当前连接

  22. P215 习题 二、填空题 5. Winsock1.Listen语句的含义是。 答案:LocalIP 使服务器处于侦听状态,等待客户访问。

  23. 8.2.3 Winsock控件的主要事件 Winsock控件的事件主要有两个: 1.DataArrival事件:一旦数据到达,就会触发该事件。它通常与GetData方法一起使用,通过GetData方法获得新到达的数据。 2. ConnectionRequest事件:当客户机使用Connect方法请求连接时触发该事件,它通常与Accept方法一起使用,用来接受客户机的连接请求。

  24. P214 习题 一、单项选择题 1. 一旦数据到达,将首先触发Winsock控件的( )。 A. DataArrival事件 B. ConnectionRequest事件 C. DataSand事件 D. DataGet事件 答案:B

  25. P214 习题 一、单项选择题 2. 要发送数据,通常使用Winsock控件的( )。 A. SendData方法 B. Listen方法 C. Accept方法 D. GetData方法 答案:A

  26. P214 习题 一、单项选择题 3. 当Winsock控件处于关闭状态时,其State属性的值是( )。 A. 1 B. 0 C. 2 D. 6 答案:B

  27. P214 习题 一、单项选择题 4. 当Winsock控件的LocalPort属性的作用是( )。 A. 仅返回所有端口 B. 仅设置所有端口 C. 返回或设置所有端口 D. 返回或设置IP地址 答案:B

  28. P214 习题 一、单项选择题 5. 当使用SendData将数据发送到主机后时,将触发的Winsock控件的是( )。 A. SendProgress B. MouseDown C. Click D. KeyPress 答案:A

  29. 8.2.4 网络应用程序设计基础 1. 基于Socket的通信过程 Winsock控件是基于Socket接口(套接字)创建的。它是现在TCP/IP网络中最通用的API(应用程序接口),也是在Internet上进行应用程序开发最通用的API。Windows Socket规范已成为Windows网络编程的标准。 Socket在计算机中提供了一个通信端口,可以通过这个端口与任何一个也同样具有Socket接口的计算机进行通信。应用程序在网络上传输、接收的信息都通过这个Socket接口来实现。基于Socket的通信过程如下页图所示:

  30. 通信细节 发送 接收 Socket Socket 发送 接收 应用程序A 应用程序B 利用Socket进行网络编程,只需对Socket接口进行 数据的读写操作,根本不必关心两台计算机间的通 信细节就能够完成数据的发送和接收工作。

  31. 通信细节 发送 接收 Socket Socket 发送 接收 应用程序A 应用程序B P 215 习题 三 问答题 1. 简述基于Socket的通信过程。 利用Socket进行网络编程,只需对Socket接口进行数据的 读写操作,根本不必关心两台计算机间的通信细节就能够完 成数据的发送和接收工作。

  32. 2.基于Winsock控件的开发模式 VB提供的Winsock控件正是基于Socket规范创建的。利用Winsock控件开发网络通信系统时,通常要涉及到服务器和客户机两类应用程序: (1)服务器程序的开发模式 • 服务器程序必须设置好LocalPort属性,作为侦听端口。该值可设置成任何一个整数,只要其它应用程序没有使用过的值即可,单习惯上应大于1000。 • 使用Listen方法使服务器进入侦听状态,等待客户机的连接请求。

  33. 2.基于Winsock控件的开发模式 (1)服务器程序的开发模式 • 客户机程序发出连接请求后,将触发服务器程序的ConnectionRequest事件,该事件得到一个参数RequestID。 • 服务器程序使用Accept方法接受客户机程序的RequestID请求。至此,服务器程序就可以使用SendData方法向客户机发送数据了。 • 当服务器接收到数据时,会产生DataArrival事件。在该事件中可使用GetData方法接收数据。

  34. (2)客户机程序的开发模式●首先设置好RemoteHost属性,用来指向运行服务器程序的远程计算机的的主机名或IP地址。●设置RemotePort属性,用来指向服务器程序的侦听端口号。●使用Connect方法向服务器提出连接请求。●如果服务器接受了上述请求,客户机程序就会产生Connect事件,可以根据需要,在此事件中编写程序,比如使用MsgBox函数向用户提示“连接已成功”之类的信息。●连接成功后,就可以根据需要使用SendData方法向服务器发送数据了。●当客户机程序接收的数据时,就会产生DataArrival事件,可以用GetData方法接收数据。(2)客户机程序的开发模式●首先设置好RemoteHost属性,用来指向运行服务器程序的远程计算机的的主机名或IP地址。●设置RemotePort属性,用来指向服务器程序的侦听端口号。●使用Connect方法向服务器提出连接请求。●如果服务器接受了上述请求,客户机程序就会产生Connect事件,可以根据需要,在此事件中编写程序,比如使用MsgBox函数向用户提示“连接已成功”之类的信息。●连接成功后,就可以根据需要使用SendData方法向服务器发送数据了。●当客户机程序接收的数据时,就会产生DataArrival事件,可以用GetData方法接收数据。

  35. P215 习题 三、问答题 3. 简述基于Winsock控件的开发过程。 答:1)服务器程序的开发模式 服务器程序必须设置好LocalPort属性,作为侦听端口。使用Listen方法使服务器进入侦听状态,等待客户机的连接请求。客户机程序发出连接请求后,将触发服务器程序的ConnectionRequest事件,该事件得到一个参数RequestID。服务器程序使用Accept方法接受客户机程序的RequestID请求。至此,服务器程序就可以使用SendData方法向客户机发送数据了。当服务器接收到数据时,会产生DataArrival事件。在该事件中可使用GetData方法接收数据。

  36. P215 习题 三、问答题 3. 简述基于Winsock控件的开发过程。 2)客户机程序的开发模式 首先设置好RemoteHost属性,用来指向运行服务器程序的远程计算机的的主机名或IP地址。设置RemotePort属性,用来指向服务器程序的侦听端口号。使用Connect方法向服务器提出连接请求。如果服务器接受了上述请求,客户机程序就会产生Connect事件。连接成功后,就可以根据需要使用SendData方法向服务器发送数据了。当客户机程序接收的数据时,就会产生DataArrival事件,可以用GetData方法接收数据。

  37. 8.3 其它网络应用程序设计 8.3.1 局域网中保证联网计算机时间同步 当采用客户机/服务器模式在局域网上开发系统时,必须保证所有计算机的时钟时间一致。在就需要用到统一的时间,以便协调工作,最号的方法就是通过程序的方法,解决时钟同步的问题。

  38. 数据服务器 MyServer …… 应用程序1 应用程序2 应用程序n 这是某一应用系统的网络拓补结构,我们可以采用Winsock 控件解决众多客户机与数据服务器间的时间同步问题。

  39. 解决时钟同步的基本思路是:首先精确调整服务器的时钟,然后,当客户机启动时与服务器连接,并与服务器“对时”。这样,每当执行应用程序时,客户机就会与服务器时钟同步了。解决时钟同步的基本思路是:首先精确调整服务器的时钟,然后,当客户机启动时与服务器连接,并与服务器“对时”。这样,每当执行应用程序时,客户机就会与服务器时钟同步了。

  40. P215 习题 三、问答题 4. 如何保证局域网中联网的计算机同步运行? 答:解决时钟同步的基本思路是:首先精确调整服务器的时钟,然后,当客户机启动时与服务器连接,并与服务器“对时”。这样,每当执行应用程序时,客户机就会与服务器时钟同步了。

  41. 1.客户机程序的主要代码 (1)与服务器建立连接 在客户机主窗体的Load事件中连接服务器程序,具体方法与聊天程序相同。 Private Sub Form_Load() '设置聊天服务器的侦听端口 WinsockClient.RemotePort = 10001 '读取本机的IP地址 txtClientIP.Text = WinsockClient.LocalIP '根据txtServerIP文本框中输入的服务器IP,连接聊天服务器 WinsockClient.RemoteHost = txtServerIP.Text WinsockClient.Connect '如果与服务器连接成功,则向用户提供下列信息 MsgBox "你成功地与聊天服务器进行了连接", End Sub

  42. (2)其它代码 Private Sub WinsockClient_DataArrival(ByVal bytesTotal) ’当收到服务器发来的数据时,完成以下工作: ’(1)日期数据类型接收数据; ’(2)设置本机的系统日期 ’定义一个日期类型数据变量 Dim MyDate As Date ’以日期数据类型接受服务器日期数据 WinsockClient.GetData MyDate,VbDate ’使本机的系统日期等于服务器日期 Date=MyDate End Sub

  43. 2.服务端程序主要代码 Private Sub WinsockServer_ConnectionRequest _ (ByVal RequestID As Long) ’当收到客户机的连接请求时,完成以下工作: ’(1)结束Winsock的侦听状态; ’(2)接受连接请求; ’(3)将服务器的系统日期发送给客户机 WinsockServer.Close WinsockServer.Accept RequestID ’将系统当前的时间Date发送给提出请求的客户机 WinsockServer.SendDate End Sub

  44. 8.3.2 Web浏览器 1.一个简单的浏览器应用程序示例 (1)创建一个新的“标准EXE”工程。利用“工程”菜单的“部件”选项添加“Windows Internet Controls”以获得对WebBrowser控件的支持。 (2)在Form1窗口上添加Text1、Command1和WebBrowser1等控件。 (3)在Command1控件的Click事件中,添加如下代码: Private Sub Command1_Click( ) ’连接要浏览的网站地址 WebBrowser1.Navigate Text1.Text End Sub (4)运行程序。在Text1输入网址后,单击Command1连接按钮,即可进入有关网页。(演示)

  45. 2.一个较完整的浏览器应用程序 一个真正的浏览器(比如IE)至少需要后退(Back)、前进(Forword)、停止(Stop)、刷新(Refresh)、主页(Home)和搜索(Search)等功能按钮,还能够显示当前网页的下载速度。要完成这些工作,就必须深入学习WebBrowser控件的有关知识。

  46. (1)LocationURL和LocationName属性 LocationURL属性返回装入网页的地址, LocationName属性则返回当前装入网页的标题。它们均是只读的,不能通过VB程序改变其值。 (2)ProgressChange事件 下载网页通常会花费一定的时间,可利用ProgressChange事件了提醒用户当前下载的进度。只要网页正在下载,改事件就会被周期性地触发。可将该事件与Progress控件结合使用,实现下载进度条提示效果。 (3)停止网页下载的方法 当用户觉得下载一个网页花费的时间太长而想终止下载时,可使用Stop方法。

  47. (4)后退与前进的方法 如果要实现大多数浏览器所具有的后退与前进功能,则可以使用GoBack,GoForword方法。这两个方法的基本原理是:对Windows目录下的History文件夹进行搜索,重新调出已查看过的HTMT页面缓存,从而完成后退与前进的功能。但如果要得到当前网页的最新内容,则要使用Refresh方法进行刷新。此外,如果想要在自己的浏览器程序中加入主页,搜索等功能,则可以使用GoHome,GoSearch方法。 (5)DownLoadBegin和DownLoadComplete事件 当网页下载工作开始和结束时,分别触发这两个事件。这两个事件通常与ProgressChange事件结合使用,起到提示用户的作用。

  48. 演示程序“Web浏览器”

More Related