第12章 网络应用程序设计_第1页
第12章 网络应用程序设计_第2页
第12章 网络应用程序设计_第3页
第12章 网络应用程序设计_第4页
第12章 网络应用程序设计_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章网络应用程序设计

主讲:

12

章网络应用程序设计

12.1

网络基础

12.2

Winsock控件

12.3WebBrowser控件

12.4InternetTransfer控件

第12章网络应用程序设计

网络基础

Winsock控件重点第12章网络应用程序设计难点Winsock控件

InternetTransfer控件

第12章网络应用程序设计12.1网络基础

12.1.1IP地址所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。Internet

上的每台主机(Host)都有一个唯一的IP地址。IP协议就是使用这个地址在主机之间传递信息,这是Internet能够运行的基础。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。例如:

掌握12.1网络基础

12.1.2域名域名(DomainName),是由一串用点分隔的名字组成的Internet上某一台计算机的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。网络中的地址方案分为两套:IP地址系统和域名地址系统。由于IP地址是数字标识,使用时难以记忆和书写,因此在IP地址的基础上又发展出一种符号化的地址方案,来代替数字型的IP地址。每一个符号化的地址都与特定的IP地址对应,这样网络上的资源访问起来就容易得多了。这个与网络上的数字型IP地址相对应的字符型地址,就被称为域名。掌握12.1网络基础

12.1.3端口这里所说的端口(port)是逻辑意义上的端口,是指TCP/IP协议中的端口,通过16位的端口号来标记的,端口号只有整数,范围是从0到65535(216-1)。在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的IP地址来进行互联网络中的路由选择。可见,把数据包顺利的传送到目的主机是没有问题的。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。不光接收数据包的进程需要开启它自己的端口,发送数据包的进程也需要开启端口,这样,数据包中将会标识有源端口,以便接收方能顺利的回传数据包到这个端口。掌握12.1网络基础

我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过一个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”(套接字)来区分不同的服务的。需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。另外,1024以下的端口号(0—1023)已经分配给了一些知名的协议,称为熟知端口。用户在开发自己的应用程序时,避免使用这些熟知端口。尽量使用大于或等于1024的端口号。掌握12.1网络基础

12.1.4协议网络协议的定义:为计算机网络中进行数据交换而建立的规则、标准或约定的集合。Internet上的计算机使用的是TCP/IP协议。TCP:是TransmissionControlProtocol的简称,中文名是传输控制协议,是一种面向连接的、可靠的、基于字节流的运输层通信协议。在计算机网络OSI模型中,它完成第四层传输层所指定的功能。它在两个主机之间建立连接,提供双向、有序且无重复的数据流服务,以及差错控制、流量控制等服务,保证数据的可靠传输。UDP是UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。数据发出去后并不进行差错控制,不能保证数据的可靠传输,一般只用于少量的数据传输。TCP协议和UDP协议都使用端口号来区分运行在同一台主机上的多个应用程序(进程)。掌握12.2Winsock控件

12.2.1Winsock控件介绍Winsock是MicrosoftWindows提供的网络编程接口,它提供了基于TCP/IP协议的接口实现方法。Winsock控件能够通过UDP协议或TCP协议连接到远程计算机并进行数据交换。使用这两种协议可以开发复杂的网络应用程序。要使用Winsock控件,首先应该将其添加到工具箱中,方法为:选择“工程”→“部件”弹出“部件”对话框。在控件列表中选择“MicrosoftWinsockControl6.0”项,单击“确定”按钮,Winsock控件就会被添加到工具箱中。Winsock控件在运行状态下不可见。掌握12.2Winsock控件

12.2.1Winsock控件的常用属性1.Protocol属性设置使用的协议(TCP或UDP),其取值及含义如表12-1所示。表12-1Protocol属性取值及含义常数数值含义sckTCPProtocol0使用TCP协议,默认值sckUDPProtocol1使用UDP协议该属性可以在属性窗口设置,也可以在程序中设置。例如:Winsock1.Protocol=sckTCPProtocol2.RemoteHost属性指定要连接的远程主机的名称(域名)或IP地址(字符串型),例如:Winsock1.RemoteHost=“”掌握12.2Winsock控件

3.RemotePort属性设置或返回要连接的应用程序(进程)的远程端口号,尽量使用大于1024的端口号。例如:Winsock1.RemotePort=66664.RemoteHostIP属性返回实际连接的远程计算机的IP地址(字符串型)。可以是客户端IP,也可以是服务器端IP。当使用TCP协议时,在连接成功后,对于客户端,该属性为服务器IP;对于服务器,该属性为客户端IP。当使用UDP协议时,在DataArrival(数据到达)事件出现后,该属性包含了发送UDP数据的计算机的IP地址。5.LocalHostName属性返回本地计算机名。只在运行状态可用。掌握12.2Winsock控件

6.LocalPort属性用于设置或返回Winsock控件使用的本地端口。对于服务器进程来说,这是用于侦听的本地端口号,必须设置;对于客户端进程来说,该属性指定发送数据的本地端口,可以不设置,由Winsock控件随机指定。7.LocalIP属性返回本地主机的IP地址(字符串型),只在运行状态可用。8.State属性用于返回Winsock控件的当前状态。掌握12.2Winsock控件

12.2.2Winsock控件的常用方法1.Connect方法使用TCP协议时,用于建立与远程服务器的连接,该方法只在客户端使用。格式:Object.Connect[remoteHost,remotePort]2.Accept方法接收一个新的连接请求。该方法只能在服务器端的应用程序中的ConnectRequest事件过程中使用。格式:Object.AcceptrequestID其中,requestID参数是ConnectRequest事件传递过来的请求号。3.Listen方法进行TCP连接时,用于创建套接字并设置为侦听模式。该方法只适用于TCP连接。格式:Object.Listen掌握12.2Winsock控件

4.SendData方法用于将数据发送给远程计算机。格式:Object.SendDatadata其中,data参数是要发送的数据。5.GetData方法用于获取从网络传送给Winsock控件的数据,该方法通常在DataArrival事件过程中使用。格式:Object.GetDatadata[,type][,maxlen]其中,data参数用于存放传过来的数据,一般为变量;type参数指定数据类型;maxlen指定数据的最大长度。6.Close方法用于关闭TCP连接。掌握12.2Winsock控件

12.2.3Winsock控件的常用事件1.Connect事件该事件在编写客户端应用程序时使用。当与服务器的连接成功后被触发。通常在该事件中写入连接成功提示信息并返回服务器IP等。2.ConnectionRequest事件该事件只能在使用TCP协议编写服务器应用程序时使用。当远程计算机请求连接时被触发,在该事件中经常使用Accept方法接受新请求的连接。3.DataArrival事件当新的数据到达时触发,该事件的bytesTotal参数指明了新到达数据的总字节数。4.SendComplete事件当完成一个发送操作时触发。5.Close事件当远程计算机关闭连接时被触发。掌握12.2Winsock控件

12.2.4Winsock编程模型1.基于TCP的模型TCP协议是面向连接的协议,允许创建和维护与远程计算机的连接。连接两台计算机就可以彼此进行数据传输。将运行服务器应用程序的计算机称为服务器,运行客户端应用程序的计算机称为客户机。(1)如果创建服务器应用程序,就应设置一个侦听端口(LocalPort属性)并调用Listen方法侦听在这个端口上的传入信息。当客户机传来要求连接的请求时就会发生ConnectionRequest事件。可调用ConnectionRequest事件内的Accept方法完成连接。(2)如果要创建客户端应用程序,就必须知道服务器的域名或IP地址,以便给RemoteHost属性设置值,还必须知道服务器应用程序(进程)在哪个端口上进行侦听,比便给RemotePort属性设置该端口值。最后调用Connect方法连接服务器。连接成功后,任何一方都可以收发数据。可以调用SendData方法来发送数据。当对方发来的数据达到时会触发DataArrival事件。此时可调用DataArrival事件内的GetData方法来接收数据。当所有数据都发送完成后,调用Close方法关闭TCP连接。掌握12.2Winsock控件

2.基于UDP的模型UDP协议是一个无连接协议,两台计算机传送数据之前并不需要建立连接。每台参与通信的计算机既可以是服务器,也可以是客户机。假设计算机1要向计算机2发送数据。首先要设置计算机2的LocalPort属性(假如:5678)。然后在计算机1端,将RemoteHost属性设置为计算机2的IP地址(),将RemotePort属性设置为计算机2的端口号(5678),并调用SendData方法来发送数据。最后,计算机2调用DataArrival事件内的GetData方法来接收计算机1发来的数据。掌握12.2Winsock控件

12.2.5Winsock控件用法示例——简易聊天程序下面分别列举两个示例来说明使用TCP协议和UDP协议开发简易聊天程序的过程。【例12.1】使用TCP协议编写一个两台主机可以互相发信息聊天的程序。两台主机中一台为服务器,另一台为客户机。所以,需要编写两个程序,分别实现服务器的功能和客户机的功能。1.服务器端程序设计(1)启动VB6.0,新建一个标准EXE工程,将默认窗体名称改为frmServer。(2)选择“工程”菜单下的“工程1属性”菜单项,在打开的“工程1—工程属性”对话框中将“工程名称”栏中的内容改为“Server”,并单击“确定”按钮。掌握12.2Winsock控件

(3)右击工具箱,选择“部件”菜单项,在打开的“部件”对话框控件列表中选中“MicrosoftWinsockControls6.0”项,单击“确定”按钮将Winsock控件添加到工具箱。(4)在窗体frmServer上,按照下图绘制控件。掌握12.2Winsock控件

掌握(5)各主要控件属性设置见表12-3。表12-3

窗体及主要控件属性控件名属性名属性值窗体frmServerCaptionServerWinsock控件scktcpServer名称scktcpServer标签控件Label_State名称Label_State文本框txtSendDatatext(空)文本框txtShowtext(空)MultiLineTrueScrollBars2-VerticalLockedTrue12.2Winsock控件

(6)编写事件过程如下。①初始化窗体装载事件中,首先将Winsock控件scktcpServer的Protocol属性设置为sckTCPProtocol,以便使用TCP协议与客户端通信;然后设置服务器的本地端口。最后调用Listen方法在此端口处侦听客户端的连接请求。代码如下:PrivateSubForm_Load()scktcpServer.Protocol=sckTCPProtocolscktcpServer.LocalPort=6666'设置服务器端的本地端口,此端口号必须设置

scktcpServer.Listen'在上面端口处,监听客户端的连接请求

Label_State.Caption="目前还没有客户端连接进来!"EndSub掌握12.2Winsock控件

②接受请求如果有客户端发来连接请求,则服务器端会自动触发ConnectionRequest事件。在该事件过程中,调用Accept方法接受客户端发来的连接请求。代码如下:PrivateSubscktcpServer_ConnectionRequest(ByValrequestIDAsLong)'有客户端请求连接,产生该事件

IfscktcpServer.State<>sckClosedThenscktcpServer.ClosescktcpServer.AcceptrequestID'接受客户端的连接请求

Label_State.Caption="客户端:"&scktcpServer.RemoteHostIP&"连接入本服务器!"'显示客户端的ip地址

txtSendData.SetFocusEndSub掌握12.2Winsock控件

③接收数据连接成功后,如果客户端发来数据,则服务器端会自动触发DataArrival事件。可以在该事件过程中,调用GetData方法接受客户端发来的数据,以便处理。代码如下:PrivateSubscktcpServer_DataArrival(ByValbytesTotalAsLong)'有数据到达

DimstrDataAsStringscktcpServer.GetDatastrData'接收对方传过来的数据

IfLen(txtShow.Text)=0ThentxtShow.Text=strDataElsetxtShow.Text=txtShow.Text&vbCrLf&strDataEndIf'下面两条语句的功能是使滚动条向下滚动,始终显示下方最新的聊天数据txtShow.SelLength=0txtShow.SelStart=Len(txtShow.Text)EndSub掌握12.2Winsock控件

④发送数据连接成功后,如果服务器有数据要向客户端发送,则服务器可以调用SendData方法向客户端发送数据。代码如下:PrivateSubtxtSendData_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'判断是否按下了回车键

IfscktcpServer.State=sckConnectedThen'判断Winsock组件是否处于连接状态

scktcpServer.SendData"服务器"&Time&vbCrLf&""&txtSendData.Text'发送数据

IfLen(txtShow.Text)=0ThentxtShow.Text="服务器"&Time&vbCrLf&""&txtSendData.TextElsetxtShow.Text=txtShow.Text&vbCrLf&"服务器"&Time&vbCrLf&""&txtSendData.TextEndIftxtSendData.Text=""txtShow.SelLength=0txtShow.SelStart=Len(txtShow.Text)ElseMsgBox"目前没有客户端连接入服务器!"EndIfEndIfEndSub掌握12.2Winsock控件

⑤对方关闭如果客户端用户关闭了窗口,则服务器端会自动触发Close事件,以便自动执行该事件过程中的代码。代码如下:PrivateSubscktcpServer_Close()'客户端窗体关闭,产生该事件

Label_State.Caption="客户端:"&scktcpServer.RemoteHostIP&"关闭!"EndSub(7)将过程保存为Server.vbp,将窗体保存为frmServer.frm。(8)选择“文件”菜单中的“生成Server.exe”,生成一个exe可执行文件。掌握12.2Winsock控件

2.客户端程序设计(1)新建一个标准EXE过程,将默认窗体名称改为frmClient。(2)选择“过程”菜单下的“过程1属性”菜单项,在打开的“过程1—工程属性”对话框中将“过程名称”栏中的内容改为“Client”,并单击“确定”按钮。(3)使用前面的方法将Winsock控件添加到工具箱。(4)在窗体frmClient上,按照下图绘制控件。掌握12.2Winsock控件

掌握12.2Winsock控件

掌握(5)各控件属性设置见表12-4表12-4

窗体及主要控件属性控件名属性名属性值窗体frmClientCaptionClientWinsock控件scktcpClient名称scktcpClient标签控件Label_State名称Label_State文本框txtSendDatatext(空)文本框txtShowtext(空)MultiLineTrueScrollBars2-VerticalLockedTrue12.2Winsock控件

(6)编写事件过程如下。①初始化窗体装载事件中,首先将Winsock控件scktcpClient的Protocol属性设置为sckTCPProtocol,以便使用TCP协议与服务器通信;然后设置想要连接的服务器的IP地址和端口号。客户端的本地端口号可以不设置,系统会自动选择一个可用的端口号。代码如下:PrivateSubForm_Load()scktcpClient.Protocol=sckTCPProtocolscktcpClient.RemoteHost=""'如果客户端与服务器不在同一台主机上,则该ip地址要设置为服务器所在主机的真正ip地址

scktcpClient.RemotePort=6666'该端口号一定要和服务器端的LocalPort属性值相同

scktcpClient.LocalPort=1234'客户端的本地端口号可以不设置,系统会随机选择一个来用

Label_State.Caption="目前还没有连接到服务器!"EndSub掌握12.2Winsock控件

②“连接”按钮单击“连接”按钮后,调用Winsock控件的Connect方法向服务器发出连接请求。代码如下:PrivateSubcmdConnect_Click()scktcpClient.Close'关闭上一次未成功的连接请求

scktcpClient.Connect'向服务器发出连接请求EndSub③服务器接受请求服务器接受请求后,会触发下列事件。代码如下:PrivateSubscktcpClient_Connect()'连接请求成功

Label_State.Caption="成功连接服务器:"&scktcpClient.RemoteHostIP'显示服务器的ip地址

txtSendData.SetFocuscmdConnect.Enabled=FalseEndSub掌握12.2Winsock控件

④发送数据判断文本框txtSendData中是否按下了回车键,如果是则调用SendData方法将回车键前面的数据发送给服务器,并同时显示在下方的聊天文本框txtShow中。代码与服务器端类似。代码如下:PrivateSubtxtSendData_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then'判断是否按下了回车键

IfscktcpClient.State=sckConnectedThen'判断Winsock组件是否处于连接状态

scktcpClient.SendData"客户端"&Time&vbCrLf&""&txtSendData.Text'发送数据

IfLen(txtShow.Text)=0ThentxtShow.Text="客户端"&Time&vbCrLf&""&txtSendData.TextElsetxtShow.Text=txtShow.Text&vbCrLf&"客户端"&Time&vbCrLf&""&txtSendData.TextEndIftxtSendData.Text=""'这两条语句的功能是使滚动条向下滚动,始终显示下方最新的聊天数据

txtShow.SelLength=0txtShow.SelStart=Len(txtShow.Text)ElseMsgBox"目前没有连接服务器,请单击“连接”按钮!"EndIfEndIfEndSub

掌握12.2Winsock控件

⑤接收数据如果服务器发来的数据达到本客户机,则会触发下列事件。在该事件中调用GetData方法接收数据,并显示在下方的聊天文本框txtShow中。代码与服务器端类似。代码如下:PrivateSubscktcpClient_DataArrival(ByValbytesTotalAsLong)'有数据到达

DimstrDataAsStringscktcpClient.GetDatastrData'接收对方传过来的数据

IfLen(txtShow.Text)=0ThentxtShow.Text=strDataElsetxtShow.Text=txtShow.Text&vbCrLf&strDataEndIf'这两条语句的功能是使滚动条向下滚动,始终显示下方最新的聊天数据txtShow.SelLength=0txtShow.SelStart=Len(txtShow.Text)EndSub掌握12.2Winsock控件

⑥对方关闭PrivateSubscktcpClient_Close()Label_State.Caption="服务器:"&scktcpClient.RemoteHostIP&"关闭!"EndSub(7)将工程保存为Client.vbp,将窗体保存为frmClient.frm。(8)选择“文件”菜单中的“生成Client.exe”,生成一个exe可执行文件。掌握12.2Winsock控件

掌握图12-7服务器程序运行界面12.2Winsock控件

掌握图12-8客户端程序运行界面

12.2Winsock控件

本示例也可以在两台不同的主机上进行测试。需要修改的是客户端程序中Winsock控件的RemoteHost属性。将其设置为另一台主机(服务器)的IP地址即可。例如,假设服务器的IP地址为“00”,客户端程序设置RemoteHost属性的语句如下:scktcpClient.RemoteHost=“00”本示例只是实现了两台主机之间的通信,如果想要让多台主机与服务器通信,应当在服务器程序中放置多个Winsock控件,每一个客户端对应一个服务器中Winsock控件。掌握12.3WebBrowser控件

WebBrowser控件主要用来编写类似IE的浏览器程序。要使用该控件开发自己的浏览器,需要把它添加到工具箱中。方法:打开“工程”→“部件”菜单项,在弹出的“部件”对话框中选中“MicrosoftInternetControls”项。了解12.3WebBrowser控件

12.3.1WebBrowser控件常用的方法1.Navigate方法用于将网页显示到WebBrowser控件中。例如:WebBrowser1.Navigate2.GoBack方法用于将网页返回到前一页。例如:WebBrowser1.GoBack3.GoForward方法用于将网页进入下一页。4.GoHome方法用于显示主页。5.Stop方法用于停止在WebBrowser控件中显示的网页。6.Refresh方法用于刷新在WebBrowser控件中显示的网页。了解12.3WebBrowser控件

【例12.3】使用WebBrowser控件制作自己的简单的浏览器。程序运行界面如图12-14所示。了解图12-14例12.3运行界面12.3WebBrowser控件

1.

添加控件首先,将WebBrowser控件和工具栏控件添加到工具箱中:打开“工程”→“部件”菜单项,在“部件”对话框中选中“MicrosoftInternetControls”和“MicrosoftWindowsCommonControls6.0”两项。2.

设计程序界面并设置控件属性程序设计界面如图12-15所示。了解12.3WebBrowser控件

了解图12-15例12.3设计界面12.3WebBrowser控件

了解在窗体上添加1个ToolBar工具栏控件、1个ImageList图像列表控件、1个TextBox文本框控件和1个WebBrowser浏览器控件。在属性窗口设置窗体及各主要控件的属性,见下表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论