版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)年度預(yù)算編制與管理實(shí)務(wù)
- 2025航空貨運(yùn)行業(yè)市場(chǎng)發(fā)展分析及未來(lái)前景研究與發(fā)展策略報(bào)告
- 2025航空行業(yè)市場(chǎng)供需分析及投資發(fā)展布局規(guī)劃分析研究報(bào)告
- 大型活動(dòng)現(xiàn)場(chǎng)管理流程及安全保障
- 2025航空航天潤(rùn)滑油生產(chǎn)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 方言文化教學(xué)設(shè)計(jì)教案
- 英語(yǔ)碩士同等學(xué)力考試真題匯編
- 項(xiàng)目管理PMP考試真題及解析
- 東莞銷(xiāo)售禮儀培訓(xùn)
- 大型招聘會(huì)合作協(xié)議書(shū)范本
- 2026年廣西中煙工業(yè)有限責(zé)任公司招聘(51名)參考筆試題庫(kù)及答案解析
- 2025余干縣發(fā)展控股集團(tuán)有限公司招聘2人參考模擬試題及答案解析
- 藥品投訴應(yīng)急預(yù)案(3篇)
- 部編人教版一年級(jí)上冊(cè)語(yǔ)文生字組詞造句
- 物業(yè)反恐防暴培訓(xùn)
- 學(xué)堂在線 智能時(shí)代下的創(chuàng)新創(chuàng)業(yè)實(shí)踐 期末考試答案
- 膽總管結(jié)石伴膽管炎的護(hù)理查房
- (高清版)TDT 1056-2019 縣級(jí)國(guó)土資源調(diào)查生產(chǎn)成本定額
- 中國(guó)類(lèi)風(fēng)濕關(guān)節(jié)炎診療指南
- 妊娠合并肥胖癥護(hù)理查房課件
- M蛋白血癥護(hù)理查房
評(píng)論
0/150
提交評(píng)論