課件2:開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用軟件_第1頁(yè)
課件2:開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用軟件_第2頁(yè)
課件2:開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用軟件_第3頁(yè)
課件2:開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用軟件_第4頁(yè)
課件2:開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用軟件_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用軟件21網(wǎng)絡(luò)聊天程序任務(wù)

1.1任務(wù)描述

VB提供了一系列的網(wǎng)絡(luò)編程控件,利用它們,網(wǎng)絡(luò)編程將成為一件快樂(lè)而簡(jiǎn)單的工作。

VB網(wǎng)絡(luò)控件主要有三種:(1)Winsok控件主要用于編制基于TCP/IP或UDP協(xié)議的網(wǎng)絡(luò)應(yīng)用程序。(2)InternetTransfer控件主要以來(lái)傳輸文件,執(zhí)行FTP命令以及登錄服務(wù)器等。(3)WebBrowser

用于創(chuàng)建瀏覽器本節(jié)先介紹Winsok控件。3

在網(wǎng)絡(luò)編程中最常用的方案是客戶(hù)機(jī)/服務(wù)器模式(Client/Server,簡(jiǎn)稱(chēng)C/S)。這種模式包含客戶(hù)機(jī)和服務(wù)器兩類(lèi)應(yīng)用程序。其中客戶(hù)應(yīng)用程序向服務(wù)器請(qǐng)求服務(wù),而服務(wù)程序通常在一個(gè)眾所周知的地址偵聽(tīng)對(duì)服務(wù)的請(qǐng)求,也就是說(shuō),服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶(hù)提出了連接請(qǐng)求。此時(shí),服務(wù)持續(xù)將被喚醒,并對(duì)客戶(hù)的請(qǐng)求作出適當(dāng)?shù)姆磻?yīng)。4

聊天服務(wù)程序:由客戶(hù)端和服務(wù)端兩個(gè)程序組成,采用Winsok控件開(kāi)發(fā)。這兩個(gè)程序可以在同一臺(tái)計(jì)算機(jī)上運(yùn)行,也可以在網(wǎng)絡(luò)上不同的計(jì)算機(jī)上運(yùn)行。整個(gè)系統(tǒng)的運(yùn)行機(jī)制是:第一步:建立連接主要過(guò)程是:由客戶(hù)端程序向服務(wù)端程序發(fā)出連接請(qǐng)求,服務(wù)端程序收到并接受連接請(qǐng)求,至此客戶(hù)機(jī)與服務(wù)器創(chuàng)建了數(shù)據(jù)交流通道。第二步:開(kāi)始聊天主要過(guò)程是:在客戶(hù)機(jī)的“發(fā)送的信息”文本框中輸入文字時(shí),服務(wù)器端的“收到的信息”文本框中就會(huì)實(shí)時(shí)地顯示相同的文字,反之亦然。51.2.服務(wù)器的界面設(shè)計(jì)1.創(chuàng)建一個(gè)“標(biāo)準(zhǔn)EXE”工程,選中“工程”菜單的“部件”,在控件中找到MicrosoftWinsockControl并將其選中。2.將Form1的名稱(chēng)改為frmSvr,并在其中添加兩個(gè)命令按鈕(Command1的Caption屬性為“退出”,Command2的Caption屬性為“發(fā)送”)。3.在窗體是添加三個(gè)TextBox控件,其名稱(chēng)分別為txtServerIP,txtSend和txtReceive。4.在窗體上添加一個(gè)Winsock控件,將其Protocol(協(xié)議)屬性設(shè)置為0(即sckTCPProtocol)。61.3服務(wù)器程序代碼設(shè)計(jì)PrivateSubForm_Load()'設(shè)置偵聽(tīng)端口

WinsockServer.LocalPort=10001

'讀取服務(wù)器的IP地址

TxtServerIP.Text=WinsockServer.LocalIP

'開(kāi)始偵聽(tīng)

WinsockServer.ListenEndSubPrivateSubCommand1_Click()'點(diǎn)擊“退出”按鈕后關(guān)閉應(yīng)用程序

UnloadMeEndSub71.3服務(wù)器程序代碼設(shè)計(jì)PrivateSubCommand2_Click()'只要txtSend文本框的內(nèi)容寫(xiě)好以后就由WinsockServer控件發(fā)送

WinsockServer.SendDataTxtSend.TextEndSubPrivateSubWinsockServer_ConnectionRequest(ByValrequestIDAsLong)'當(dāng)收到連接請(qǐng)求時(shí),Winsock處于偵聽(tīng)狀態(tài)

'此時(shí)應(yīng)該使用Close方法關(guān)閉Winsock,然后使用Accept方法接受連接請(qǐng)求

WinsockServer.CloseWinsockServer.AcceptrequestIDEndSub81.3服務(wù)器程序代碼設(shè)計(jì)PrivateSubWinsockServer_DataArrival(ByValBytesTotalAsLong)'當(dāng)客戶(hù)端有信息發(fā)送來(lái)時(shí),利用WinsockServer控件的GatData方法讀取數(shù)據(jù)

'并將其顯示在txtReceive文本框中

DimMyStrAsStringWinsockServer.GetDataMyStrTxtReceive.Text=MyStrEndSub91.4客戶(hù)機(jī)程序界面設(shè)計(jì)1.創(chuàng)建一個(gè)新的“標(biāo)準(zhǔn)EXE”工程,并添加Winsock控件。2.將Form1的名稱(chēng)改為frmClt,并在其中添加兩個(gè)命令按鈕(Command1的Caption屬性為“退出”,Command2的Caption屬性為“連接服務(wù)器”,Command3的Caption屬性為“發(fā)送”)。3.在窗體是添加四個(gè)TextBox控件,其名稱(chēng)分別為txtClientIP,txtServerIP,txtSend和txtReceive。4.在窗體上添加一個(gè)Winsock控件,將其Protocol(協(xié)議)屬性設(shè)置為0(即sckTCPProtocol)。101.4.客戶(hù)機(jī)的程序代碼設(shè)計(jì)PrivateSubForm_Load()'設(shè)置聊天服務(wù)器的偵聽(tīng)端口

WinsockClient.RemotePort=10001

'讀取本機(jī)的IP地址

txtClientIP.Text=WinsockClient.LocalIPEndSubPrivateSubCommand1_Click()'點(diǎn)擊“退出”按鈕后關(guān)閉應(yīng)用程序

UnloadMeEndSub111.4.客戶(hù)機(jī)的程序代碼設(shè)計(jì)PrivateSubCommand2_Click()'根據(jù)txtServerIP文本框中輸入的服務(wù)器IP,連接聊天服務(wù)器

WinsockClient.RemoteHost=txtServerIP.TextWinsockClient.ConnectEndSubPrivateSubCommand3_Click()'輸入txtSend文本框的內(nèi)容后由WinsockServer控件發(fā)送

WinsockClient.SendDatatxtSend.TextEndSub121.4.客戶(hù)機(jī)的程序代碼設(shè)計(jì)PrivateSubWinsockClient_Connect()'如果與服務(wù)器連接成功,則向用戶(hù)提供下列信息

MsgBox"你成功地與聊天服務(wù)器進(jìn)行了連接",vbInformationEndSubPrivateSubWinsockClient_DataArrival(ByValBytesTotalAsLong)'當(dāng)服務(wù)器有信息發(fā)送來(lái)時(shí),利用WinsockClient控件的GatData方法讀取數(shù)據(jù)

'并將其顯示在txtReceive文本框中

DimMyStrAsStringWinsockClient.GetDataMyStrtxtReceive.Text=MyStrEndSub13演示聊天程序142Winsock控件及網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)基礎(chǔ)

Winsock控件是建立在TCP協(xié)議的基礎(chǔ)上,能夠完成遠(yuǎn)程計(jì)算機(jī)間的通信,用途非常廣泛。即使我們對(duì)TCP/IP,TCP這些知識(shí)不太熟悉,只要理解了網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)的一般原理,并對(duì)Winsock的主要屬性、方法和事件有所了解,也可以在很短時(shí)間內(nèi)創(chuàng)建一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)通信程序。152.1Winsock控件的主要屬性Winsock控件主要有八個(gè)屬性:1.BytesReceived屬性:返回接收到的數(shù)據(jù)。通常用GetData方法來(lái)獲取這些數(shù)據(jù)。2.LocalHostName屬性:返回本地計(jì)算機(jī)的名稱(chēng)。3.LocalIP屬性:返回本地計(jì)算機(jī)的IP地址。4.LocalPost屬性:返回或者設(shè)置所用的端口,如果設(shè)置為0,則使用隨機(jī)端口。5.Protocol屬性:返回或設(shè)置Winsock所用的協(xié)議(TCP或UDP)。6.RemoteHostName屬性,返回或設(shè)置遠(yuǎn)程計(jì)算機(jī)的名稱(chēng)。7.RemoteHostIP屬性,返回遠(yuǎn)程計(jì)算機(jī)的IP地址。8.State屬性:返回Winsock控件的當(dāng)前狀態(tài)。16符號(hào)常數(shù)值含義sckClosed0關(guān)閉狀態(tài),缺省值sckOpen1打開(kāi)狀態(tài)sckListening2偵聽(tīng)狀態(tài)sckConnectionPending3連接狀態(tài)sckResolvingHost4解析主機(jī)sckHostResolved5以解析的主機(jī)sckConnecting6正在連接Sckconnected7已經(jīng)連接sckClosing8客戶(hù)端正在關(guān)閉連接sckErros9錯(cuò)誤Winsock控件的State屬性172.2Winsock控件的主要方法Winsock控件的方法主要有六個(gè):1.Listen方法語(yǔ)法:Winsock對(duì)象.Listen作用:使服務(wù)器處于偵聽(tīng)狀態(tài),等待客戶(hù)訪問(wèn)。2.Connect方法語(yǔ)法:Winsock對(duì)象.Connect[遠(yuǎn)程主機(jī)IP,遠(yuǎn)程端口]作用:用于向遠(yuǎn)程主機(jī)發(fā)出連接請(qǐng)求。3.Accept方法語(yǔ)法:Winsock對(duì)象.AcceptRequestID作用:用于接受一個(gè)連接請(qǐng)求,其中RequestID是客戶(hù)機(jī)發(fā)來(lái)的請(qǐng)求信號(hào)182.2Winsock控件的主要方法Winsock控件的方法主要有六個(gè):4.SendData方法語(yǔ)法:Winsock對(duì)象.SendData數(shù)據(jù)作用:用于發(fā)送數(shù)據(jù)5.GetData方法語(yǔ)法:Winsock對(duì)象.GetData變量[數(shù)據(jù)類(lèi)型[,最大長(zhǎng)度]作用:用來(lái)獲得接收到的數(shù)據(jù)6.Clcse方法語(yǔ)法:Winsock對(duì)象.Close作用:關(guān)閉當(dāng)前連接192.3Winsock控件的主要事件Winsock控件的事件主要有兩個(gè):1.DataArrival事件:一旦數(shù)據(jù)到達(dá),就會(huì)觸發(fā)該事件。它通常與GetData方法一起使用,通過(guò)GetData方法獲得新到達(dá)的數(shù)據(jù)。2.ConnectionRequest事件:當(dāng)客戶(hù)機(jī)使用Connect方法請(qǐng)求連接時(shí)觸發(fā)該事件,它通常與Accept方法一起使用,用來(lái)接受客戶(hù)機(jī)的連接請(qǐng)求。202.4網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)基礎(chǔ)1.基于Socket的通信過(guò)程Winsock控件是基于Socket接口(套接字)創(chuàng)建的。它是現(xiàn)在TCP/IP網(wǎng)絡(luò)中最通用的API(應(yīng)用程序接口),也是在Internet上進(jìn)行應(yīng)用程序開(kāi)發(fā)最通用的API。WindowsSocket規(guī)范已成為Windows網(wǎng)絡(luò)編程的標(biāo)準(zhǔn)。Socket在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過(guò)這個(gè)端口與任何一個(gè)也同樣具有Socket接口的計(jì)算機(jī)進(jìn)行通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸、接收的信息都通過(guò)這個(gè)Socket接口來(lái)實(shí)現(xiàn)?;赟ocket的通信過(guò)程如下頁(yè)圖所示:21SocketSocket應(yīng)用程序A發(fā)送發(fā)送接收接收應(yīng)用程序B通信細(xì)節(jié)利用Socket進(jìn)行網(wǎng)絡(luò)編程,只需對(duì)Socket接口進(jìn)行數(shù)據(jù)的讀寫(xiě)操作,根本不必關(guān)心兩臺(tái)計(jì)算機(jī)間的通信細(xì)節(jié)就能夠完成數(shù)據(jù)的發(fā)送和接收工作。222.基于Winsock控件的開(kāi)發(fā)模式VB提供的Winsock控件正是基于Socket規(guī)范創(chuàng)建的。利用Winsock控件開(kāi)發(fā)網(wǎng)絡(luò)通信系統(tǒng)時(shí),通常要涉及到服務(wù)器和客戶(hù)機(jī)兩類(lèi)應(yīng)用程序:(1)服務(wù)器程序的開(kāi)發(fā)模式服務(wù)器程序必須設(shè)置好LocalPort屬性,作為偵聽(tīng)端口。該值可設(shè)置成任何一個(gè)整數(shù),只要其它應(yīng)用程序沒(méi)有使用過(guò)的值即可,單習(xí)慣上應(yīng)大于1000。使用Listen方法使服務(wù)器進(jìn)入偵聽(tīng)狀態(tài),等待客戶(hù)機(jī)的連接請(qǐng)求。232.基于Winsock控件的開(kāi)發(fā)模式(1)服務(wù)器程序的開(kāi)發(fā)模式客戶(hù)機(jī)程序發(fā)出連接請(qǐng)求后,將觸發(fā)服務(wù)器程序的ConnectionRequest事件,該事件得到一個(gè)參數(shù)RequestID。服務(wù)器程序使用Accept方法接受客戶(hù)機(jī)程序的RequestID請(qǐng)求。至此,服務(wù)器程序就可以使用SendData方法向客戶(hù)機(jī)發(fā)送數(shù)據(jù)了。當(dāng)服務(wù)器接收到數(shù)據(jù)時(shí),會(huì)產(chǎn)生DataArrival事件。在該事件中可使用GetData方法接收數(shù)據(jù)。24(2)客戶(hù)機(jī)程序的開(kāi)發(fā)模式

●首先設(shè)置好RemoteHost屬性,用來(lái)指向運(yùn)行服務(wù)器程序的遠(yuǎn)程計(jì)算機(jī)的的主機(jī)名或IP地址。

●設(shè)置RemotePort屬性,用來(lái)指向服務(wù)器程序的偵聽(tīng)端口號(hào)。

●使用Connect方法向服務(wù)器提出連接請(qǐng)求。

●如果服務(wù)器接受了上述請(qǐng)求,客戶(hù)機(jī)程序就會(huì)產(chǎn)生Connect事件,可以根據(jù)需要,在此事件中編寫(xiě)程序,比如使用MsgBox函數(shù)向用戶(hù)提示“連接已成功”之類(lèi)的信息。

●連接成功后,就可以根據(jù)需要使用SendData方法向服務(wù)器發(fā)送數(shù)據(jù)了。

●當(dāng)客戶(hù)機(jī)程序接收的數(shù)據(jù)時(shí),就會(huì)產(chǎn)生DataArrival事件,可以用GetData方法接收數(shù)據(jù)。253其它網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)

3.1局域網(wǎng)中保證聯(lián)網(wǎng)計(jì)算機(jī)時(shí)間同步當(dāng)采用客戶(hù)機(jī)/服務(wù)器模式在局域網(wǎng)上開(kāi)發(fā)系統(tǒng)時(shí),必須保證所有計(jì)算機(jī)的時(shí)鐘時(shí)間一致。在就需要用到統(tǒng)一的時(shí)間,以便協(xié)調(diào)工作,最號(hào)的方法就是通過(guò)程序的方法,解決時(shí)鐘同步的問(wèn)題。26數(shù)據(jù)服務(wù)器MyServer應(yīng)用程序1應(yīng)用程序2應(yīng)用程序n……這是某一應(yīng)用系統(tǒng)的網(wǎng)絡(luò)拓補(bǔ)結(jié)構(gòu),我們可以采用Winsock控件解決眾多客戶(hù)機(jī)與數(shù)據(jù)服務(wù)器間的時(shí)間同步問(wèn)題。27

解決時(shí)鐘同步的基本思路是:首先精確調(diào)整服務(wù)器的時(shí)鐘,然后,當(dāng)客戶(hù)機(jī)啟動(dòng)時(shí)與服務(wù)器連接,并與服務(wù)器“對(duì)時(shí)”。這樣,每當(dāng)執(zhí)行應(yīng)用程序時(shí),客戶(hù)機(jī)就會(huì)與服務(wù)器時(shí)鐘同步了。281.客戶(hù)機(jī)程序的主要代碼(1)與服務(wù)器建立連接在客戶(hù)機(jī)主窗體的Load事件中連接服務(wù)器程序,具體方法與聊天程序相同。PrivateSubForm_Load()'設(shè)置聊天服務(wù)器的偵聽(tīng)端口

WinsockClient.RemotePort=10001'讀取本機(jī)的IP地址

txtClientIP.Text=WinsockClient.LocalIP'根據(jù)txtServerIP文本框中輸入的服務(wù)器IP,連接聊天服務(wù)器

WinsockClient.RemoteHost=txtServerIP.TextWinsockClient.Connect'如果與服務(wù)器連接成功,則向用戶(hù)提供下列信息

MsgBox"你成功地與聊天服務(wù)器進(jìn)行了連接",EndSub29(2)其它代碼PrivateSubWinsockClient_DataArrival(ByValbytesTotal)’當(dāng)收到服務(wù)器發(fā)來(lái)的數(shù)據(jù)時(shí),完成以下工作:’(1)日期數(shù)據(jù)類(lèi)型接收數(shù)據(jù);’(2)設(shè)置本機(jī)的系統(tǒng)日期’定義一個(gè)日期類(lèi)型數(shù)據(jù)變量

DimMyDateAsDate

’以日期數(shù)據(jù)類(lèi)型接受服務(wù)器日期數(shù)據(jù)

WinsockClient.GetDataMyDate,VbDate

’使本機(jī)的系統(tǒng)日期等于服務(wù)器日期

Date=MyDateEndSub302.服務(wù)端程序主要代碼PrivateSubWinsockServer_ConnectionRequest_(ByValRequestIDAsLong)’當(dāng)收到客戶(hù)機(jī)的連接請(qǐng)求時(shí),完成以下工作:’(1)結(jié)束Winsock的偵聽(tīng)狀態(tài);’(2)接受連接請(qǐng)求;’(3)將服務(wù)器的系統(tǒng)日期發(fā)送給客戶(hù)機(jī)

WinsockServer.CloseWinsockServer.AcceptRequestID

’將系統(tǒng)當(dāng)前的時(shí)間Date發(fā)送給提出請(qǐng)求的客戶(hù)機(jī)

WinsockServer.SendDateEndSub313.2Web瀏覽器1.一個(gè)簡(jiǎn)單的瀏覽器應(yīng)用程序示例(1)創(chuàng)建一個(gè)新的“標(biāo)準(zhǔn)EXE”工程。利用“工程”菜單的“部件”選項(xiàng)添加“WindowsInternetControls”以獲得對(duì)WebBrowser控件的支持。(2)在Form1窗口上添加Text1、Command1和WebBrowser1等控件。(3)在Command1控件的Click事件中,添加如下代碼:

PrivateSubCommand1_Click()

’連接要瀏覽的網(wǎng)站地址

WebBrowser1.NavigateText1.TextEndSub(4)運(yùn)行程序。在Text1輸入網(wǎng)址后,單擊Command1連接按鈕,即可進(jìn)入有關(guān)網(wǎng)頁(yè)。(演示)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論