版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.word 格式 .現(xiàn)在大多數(shù)語言都支持客戶服務(wù)器模式編程,其中 VB給我們提供了很好的客戶服 務(wù)器編程方式。下面我們用 VB來實(shí)現(xiàn) TCPIP 網(wǎng)絡(luò)編程。TCPIP 協(xié)議是 Internet 最重要的協(xié)議。 VB提供了 WinSock控件, 用于在 TCPIP 的基礎(chǔ)上進(jìn)行網(wǎng)絡(luò)通信。當(dāng)兩個(gè)應(yīng)用程序使用 Socket 進(jìn)行網(wǎng)絡(luò)通信時(shí),其中一個(gè)必須 創(chuàng)建 Socket 服務(wù)器偵聽,而另一個(gè)必須創(chuàng)建 Socket 客戶去連接服務(wù)器。這樣兩個(gè)程序 就可以進(jìn)行通信了。1創(chuàng)建服務(wù)器,首先創(chuàng)建一個(gè)服務(wù)端口號(hào)。并開始偵聽是否有客戶請(qǐng)求連接。建立一窗體,并向其增加一個(gè) Winsock 控件 ( 可在工程菜單中
2、的部件項(xiàng)來添加此控 件) ,添加兩文本框 Text1,Text2, 和一按鈕 Command。1Private Sub Form_Load()SockServer.LocalPort = 2000 服務(wù)器端口號(hào) , 最好大于 1000SockServer.Listen 開始偵聽End SubPrivate Sub Form_Unload(Cancel As Integer)SockServer.CloseEnd SubPrivate Sub SockServer_Close()SockServer.CloseEnd SubPrivate Sub SockServer_ConnectionReq
3、uest(ByVal requestID As Long)專業(yè) .專注.word 格式 .SockServer.CloseSockServer.Accept requestID 表示客戶請(qǐng)求連接的 ID 號(hào)End Sub當(dāng)客戶向服務(wù)器發(fā)送數(shù)據(jù)到達(dá)后 , 產(chǎn)生 DataArrival 事件 , 在事件中接收數(shù) 據(jù) ,GetData 方法接收數(shù)據(jù)。Private Sub SockServer_DataArrival(ByVal bytesTotal As Long)Dim s As StringSockServer.GetData sText1.Text = sEnd Sub當(dāng)我需要向客戶發(fā)送數(shù)據(jù)
4、時(shí),只需調(diào)用 SendData 方法。Private Sub Command1_Click()SockServer .SendData Text2.TextEnd Sub2創(chuàng)建客戶。要?jiǎng)?chuàng)建客戶連接服務(wù)器,首先設(shè)置服務(wù)器主機(jī)名,如IP 地址、域名或計(jì)算機(jī)名,然后設(shè)置服務(wù)器端口,最后連接服務(wù)器。建立一窗體,并向其增加一個(gè) Winsock 控件 ( 可在工程菜單中的部件項(xiàng)來添加此控 件) ,取名為: SockC1。添加兩文本框 Text1,Text2, 和一按鈕 Command。1專業(yè) .專注.word 格式 .Private Sub Form_Load()SockCl.RemoteHost = 1
5、 表示服務(wù)器主機(jī)名SockCl.RemotePort = 2000表示服務(wù)器端口名SockCl.Connect連接到服務(wù)器End SubPrivate Sub Form_Unload(Cancel As Integer)SockCl.CloseEnd SubPrivate Sub SockCl_Close()SockCl.CloseEnd SubPrivate Sub SockCl_DataArrival(ByVal bytesTotal As Long)Dim s As StringSockCl.GetData s 接收數(shù)據(jù)到文本框中Text1.Text = sEnd Sub
6、Private Sub Command1_Click()SockCl.SendData Text2.Text 向服務(wù)器發(fā)送數(shù)據(jù)End Sub專業(yè) .專注.word 格式 .3進(jìn)行通信。把這兩個(gè)窗體分別編譯成兩個(gè) EXE文件,服務(wù)器 Server.exe 和客戶Client.exe 程序,并把它們分別安裝在服務(wù)器端和客戶端,這樣就可以實(shí)現(xiàn)兩者通信 了。VB Socket 編程(Winsock 控件創(chuàng)建 TCP/IP客戶機(jī)/服務(wù)器程序 )Winsock 控件建立在 TCP、UDP協(xié)議的基礎(chǔ)上,完成與遠(yuǎn)程計(jì)算機(jī)的通信。即使對(duì) TCP/IP不太熟悉的用戶,使用該控件也可以在十幾分鐘內(nèi)創(chuàng)建一 個(gè)簡(jiǎn)單的客
7、戶機(jī) / 服務(wù) 器程序。下面我們對(duì) Winsock 控件的事件、方法、屬性按其在程序中出現(xiàn)的順序分別作 詳細(xì)的介紹,以便更好地理解程序源代碼。下面是 Winsock 控件的相關(guān)屬性,方法和事件。 (略去一些暫用不到的 )*屬性LocalHostName | 本地機(jī)器名LocalIP | 本地機(jī)器 IP 地址LocalPort | 本地機(jī)器通信程序的端口 (0 端口 65536)RemoteHost | 遠(yuǎn)程機(jī)器名RemotePort | 遠(yuǎn)程機(jī)器的通信程序端口state | 連接的當(dāng)前狀態(tài) ( 文后有詳細(xì)說明 )Protocal | 使用 TCP或UDP協(xié)議(這里我們選0- sckTCPPro
8、tocal )專業(yè) .專注.word 格式 .方法ListenListen 方法用于服務(wù)器程序,等待客戶訪問。格式: Winsock 對(duì)象 .listenConnectConnect 方法用于向遠(yuǎn)程主機(jī)發(fā)出連接請(qǐng)求格式: Winsock對(duì)象.connect 遠(yuǎn)程主機(jī) IP, 遠(yuǎn)程端口AcceptAccept 方法用于接受一個(gè)連接請(qǐng)求格式: Winsock對(duì)象.accept Request IDSenddata此方法用于發(fā)送數(shù)據(jù)格式: Winsock 對(duì)象 .senddata 數(shù)據(jù)Getdata用來取得接收到的數(shù)據(jù)格式: Winsock對(duì)象.getdata 變量 , 數(shù)據(jù)類型 , 最大長(zhǎng)度 Cl
9、ose關(guān)閉當(dāng)前連接格式: Winsock 對(duì)象 .close *事件專業(yè) .專注.word 格式 .Close | 遠(yuǎn)程機(jī)器關(guān)閉連接時(shí)觸發(fā)Connect | 連接建立好,可以進(jìn)行通信時(shí)觸發(fā) (客戶端) ConnectRequest | 有請(qǐng)求連接到達(dá)時(shí)產(chǎn)生 ( 服務(wù)器端 ) DataArrival | 有數(shù)據(jù)到達(dá)時(shí)觸發(fā)Error | 發(fā)生錯(cuò)誤時(shí)發(fā)生SendProgress | 數(shù)據(jù)傳送進(jìn)度服務(wù)器程序的實(shí)現(xiàn)過程是:( 1)服務(wù)器程序必須設(shè)置好 LocalPort 屬性,作為偵聽端口,該值為一個(gè)整數(shù)(只要 是一個(gè)其它 TCP/IP 應(yīng)用程序沒有使用過的值即可)。( 2)使用 Listen 方法進(jìn)入
10、偵聽狀態(tài),等待客戶機(jī)程序的連接請(qǐng)求。( 3)客戶機(jī)程序發(fā)出連接請(qǐng)求,使服務(wù)器程序產(chǎn)生 ConnectionRequest 事件,該事件 得到一個(gè)參數(shù) requestID 。( 4)服務(wù)器程序用 Accept 方法接受客戶機(jī)程序的 requestID 請(qǐng)求。這樣,服務(wù)器程序 就可以用 SendData方法發(fā)送數(shù)據(jù)了。 Accept 方法必須用上一步得到的 requestID 作為 其參數(shù)。( 5)當(dāng)服務(wù)器程序接收到數(shù)據(jù)時(shí),產(chǎn)生 DataArrival 事件,參數(shù) BytesTotal 包含接收 到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用 GetData 方法接收數(shù)據(jù)。(6)如果接受到 Close 事件,
11、則用 Close 方法關(guān)閉 TCP/IP 連接。 客戶機(jī)程序的實(shí)現(xiàn)過程是:專業(yè) .專注.word 格式 .(1) 客戶程序設(shè)置 Remotehost 屬性,以便指定運(yùn)行服務(wù)器程序的主機(jī) 名,該字符串 可在“控制面板 | 網(wǎng)絡(luò)|標(biāo)識(shí)| 計(jì)算機(jī)名”中查到。(2) 設(shè)置 RemotePort 屬性, 以便指定服務(wù)器程序的偵聽端口。( 3)使用 Connect 方法,向服務(wù)器提出連接請(qǐng)求。(4)服務(wù)器接受客戶機(jī)程序的請(qǐng)求, 客戶機(jī)程序產(chǎn)生 Connect 事件,就可以用 SendData 方法發(fā)送數(shù)據(jù)了。( 5)當(dāng)客戶機(jī)程序接收到數(shù)據(jù)時(shí),產(chǎn)生 DataArrival 事件,參數(shù) BytesTotal
12、包含接收 到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用 GetData 方法接收數(shù)據(jù)。( 6)如果接受到 Close 事件,則用 Close 方法關(guān)閉連接。Winsock 控件還有兩個(gè)重要的屬性, 即 Protocol 和 State 。Protocol 設(shè)定使用的協(xié)議是TCP還是 UDP:取值 sckTCPProtocol 表示 TCP, 取值 sckUDPProtocol 則表示 UDP。因?yàn)?Winsock 控件的缺省設(shè)置是 sckTCPProtocol ,所以程序中并沒有使用 Protocol 屬性。 State 屬性反映的是當(dāng)前 TCP/IP 的連接狀態(tài),取值如表 1 所示。表 1 Winso
13、ck 控件的 State 屬性及其描述常數(shù) 值 描述SckClosed 0 缺省值,關(guān)閉SckOpen 1 打開SckListening 2 偵聽SckConnectionPending 3 連接掛起SckResolvingHost 4 識(shí)別主機(jī)SckHostResolved 5 已識(shí)別主機(jī)SckConnecting 6 正在連接專業(yè) .專注.word 格式 .SckConnected 7 已連接SckClosing 8 同級(jí)人員正在關(guān)閉連接 SckError 9 錯(cuò)誤 先在一臺(tái)計(jì)算機(jī)上運(yùn)行服務(wù)器程序,此時(shí)窗口上只有一個(gè)“退出”按鈕。 再在另一臺(tái) 計(jì)算機(jī)上運(yùn)行客戶機(jī)程序, 在“連接”按鈕右邊的
14、文本框中輸入服務(wù)器的主機(jī)名后單擊 “連接”按鈕。如果連接成功,則服務(wù)器和客戶機(jī)程序窗口都會(huì)出 現(xiàn)兩個(gè)文本框。這 時(shí),兩端都可以在上面的文本框中輸入文字,這些文字會(huì)立即在下面的文本框中出現(xiàn)。 服務(wù)器程序使用的控件如下:( 1)Command:1 退出按鈕;( 2)textsend :發(fā)送數(shù)據(jù)文本框;( 3)Winsockserver : 服務(wù)器 Winsock;( 4)textget :接收數(shù)據(jù)文本框。 服務(wù)器程序的界面如圖所示。服務(wù)器程序的源代碼如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Form_Load() textsend.V
15、isible = False textget.Visible = FalseWinsockserver.LocalPort = 1001Winsockserver.Listen專業(yè) .專注.word 格式 .End SubPrivate Sub textsend_Change()Winsockserver.SendData textsend.TextEnd SubPrivate Sub Winsockserver_Close()Winsockserver.CloseEndEnd SubPrivate Sub Winsockserver_ConnectionRequest(ByVal reque
16、stID As Long) textsend.Visible = Truetextget.Visible = TrueIf Winsockserver.State sckClosed Then Winsockserver.CloseWinsockserver.Accept requestIDEnd SubPrivate Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)Dim tmpstr As StringWinsockserver.GetData tmpstrtextget.Text = tmpstrEnd Sub專業(yè) .專注.w
17、ord 格式 .客戶機(jī)程序使用的控件如下:( 1)Command:1 退出按鈕; (2)Command:2 連接按鈕;( 3)Winsockclient :客戶 Winsock;(4)Text1 :主機(jī)名文本框;(5)Textsend :發(fā)送數(shù)據(jù)文本框; ( 6)Textget :接收數(shù)據(jù)文本框; 客戶機(jī)程序的源代碼如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Command2_Click()Winsockclient.ConnectEnd SubPrivate Sub Form_Load() textsend.Visible = F
18、alse textget.Visible = FalseWinsockclient.RemotePort = 1001Winsockclient.RemoteHost = sccdszEnd SubPrivate Sub Text1_Change()專業(yè) .專注.word 格式 .Winsockclient.RemoteHost = Text1.TextEnd SubPrivate Sub textsend_Change()Winsockclient.SendData textsend.TextEnd SubPrivate Sub Winsockclient_Close()Winsockcli
19、ent.CloseEndEnd SubPrivate Sub winsockclient_Connect()textsend.Visible = Truetextget.Visible = TrueCommand2.Visible = FalseEnd SubPrivate Sub winsockclient_DataArrival(ByVal bytesTotal As Long)Dim tmpstr As StringWinsockclient.GetData tmpstrtextget.Text = tmpstrEnd Sub專業(yè) .專注.word 格式 .1 引言隨著網(wǎng)絡(luò)通信的興起與迅
20、速發(fā)展, TCP/IP 協(xié)議已成為計(jì)算機(jī)網(wǎng)絡(luò)中最主要的傳輸協(xié) 議, TCP/IP 傳輸協(xié)議也越來越為人所熟知。目前的 Internet 網(wǎng)就是基于 TCP/IP協(xié)議 的互聯(lián)網(wǎng)絡(luò)。 TCP/IP 除了用于廣域外,在局域網(wǎng)中也廣泛應(yīng)用。TCP 是傳輸控制協(xié)議,它提供了一種可靠的、面向會(huì)話連接的數(shù)據(jù)流服務(wù),它可以 在一個(gè)分組可能發(fā)生丟失、破壞、重復(fù)、延遲和亂序的不可靠物理網(wǎng)絡(luò)之上通過確認(rèn)、 流控、復(fù)用同步等自動(dòng)糾錯(cuò)技術(shù)提供一種可靠的進(jìn)程間通信機(jī)制,從而充分保證用戶數(shù) 據(jù)傳送的可靠和有序性。使用 TCP協(xié)議通信時(shí), TCP建立并控制數(shù)據(jù)發(fā)送方與接收方的 會(huì)話關(guān)系,當(dāng)接收方正確收到數(shù)據(jù)后,必須向發(fā)送方發(fā)
21、送確認(rèn)信息。如果發(fā)送方在指定 時(shí)間內(nèi)未能收到確認(rèn)信息,將重發(fā)數(shù)據(jù)包。IP 指分組交換協(xié)議, 是聯(lián)網(wǎng)的主機(jī)之間定義數(shù)據(jù)包傳送路由的規(guī)則, 它的基本任務(wù) 是通過網(wǎng)絡(luò)傳送數(shù)據(jù)報(bào),各個(gè) IP 數(shù)據(jù)報(bào)之間是相互獨(dú)立的。 IP 本身沒有連接協(xié)議,在 交換數(shù)據(jù)前不會(huì)建立會(huì)話關(guān)系。 IP 收到數(shù)據(jù)后也不確認(rèn), 發(fā)送方和接收方都不檢測(cè)數(shù)據(jù) 傳輸?shù)恼_性。所以僅有 IP 是不可靠的,不能確保正確傳輸數(shù)據(jù)。 TCP與 IP 的組合則 構(gòu)成了功能完整的傳輸協(xié)議。在 TCP/IP 網(wǎng)絡(luò)應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用客戶 / 服務(wù)器模型方式,客戶向服 務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器作出應(yīng)答響應(yīng),服務(wù)器通常在一個(gè)眾所周知的地址偵
22、聽客戶 向服務(wù)器發(fā)出的請(qǐng)求,服務(wù)進(jìn)程這時(shí)一直是處于休眠狀態(tài),直到有一個(gè)客戶程序提出連 接請(qǐng)求。服務(wù)器作出應(yīng)答,并為客戶提供相應(yīng)的服務(wù)??蛻?/ 服務(wù)器模型最重要的特點(diǎn) 是非對(duì)等相互作用,客戶與服務(wù)器處于不平等的地位。服務(wù)器擁有客戶機(jī)所不具備的各 種軟硬件資源和運(yùn)算處理能力,服務(wù)器提供服務(wù),客戶請(qǐng)求服務(wù),這種模式適應(yīng)了網(wǎng)絡(luò) 資源、運(yùn)算能力、信息分布不均等現(xiàn)象,成為 IP 應(yīng)用的主要模式。 Internet 中的 WW、W FTP、Telnet 、E-mail 等許多典型應(yīng)用都是采用客戶 / 服務(wù)器模型方式。Visual Basic 是 Windows 環(huán)境下簡(jiǎn)單、易學(xué)、高效的可視化編程語言開發(fā)系
23、統(tǒng),以 其所見即所得的可視化界面設(shè)計(jì)風(fēng)格和 32 位面向?qū)ο蟮某绦蛟O(shè)計(jì)等特點(diǎn),已廣泛地應(yīng) 用于各個(gè)領(lǐng)域, 是很多計(jì)算機(jī)軟件開發(fā)人員采用的開發(fā)工具。 VB不但提供了良好的界面 設(shè)計(jì)能力,而且在網(wǎng)絡(luò)通信方面的功能也很強(qiáng)。采用 VB開發(fā)網(wǎng)絡(luò)通信應(yīng)用軟件十分方 便,尤其軟件界面設(shè)計(jì)非常便捷,編程工作量較小,開發(fā)周期短。Visual Basic6.0中提供了 Winsock 控件,用于支持網(wǎng)絡(luò)中兩臺(tái)以上計(jì)算機(jī)之間進(jìn)行通信。 Winsock 控件提供了多樣化的屬性和方法來實(shí)現(xiàn)網(wǎng)絡(luò)通信。通過設(shè)置 Winsock 控件屬性及調(diào)用控件方法就能夠?qū)崿F(xiàn) TCP或 UDP方式的網(wǎng)絡(luò)通信。因此,使用 Winsock專業(yè)
24、 .專注.word 格式 .控件編寫網(wǎng)絡(luò)通信程序的過程, 實(shí)際上就是設(shè)置 Winsock 控件屬性和調(diào)用控件方法的過 程。利用這個(gè)控件,編程人員可以輕松地編寫出 TCP/IP 客戶服務(wù)器程序。2 Winsock 控件Winsock 控件是不可視控件,它提供了訪問 TCP和 UDP網(wǎng)絡(luò)服務(wù)非常簡(jiǎn)便的途徑, 使編程人員開發(fā)客戶 / 服務(wù)器應(yīng)用程序時(shí),不必了解 TCP的細(xì)節(jié)或調(diào)用低級(jí)的 WinsockAPIs 函數(shù),只通過設(shè)置 Winsock 控件的屬性并調(diào)用其方法,就可直接連接到一 臺(tái)遠(yuǎn)程計(jì)算機(jī)進(jìn)行, 并可實(shí)現(xiàn)雙向數(shù)據(jù)交換。 Microsoft Access、Visual Baisc 、Visua
25、l C+或 Visual FoxPro 都可用其編寫客戶服務(wù)器程序。如果訪問 TCP傳輸控制協(xié)議服務(wù)功能,則須建立連接并實(shí)現(xiàn)主機(jī)間點(diǎn)對(duì)點(diǎn)通信。如 果訪問 UDP數(shù)據(jù)文報(bào)協(xié)議功能,則不建立連接,發(fā)送數(shù)據(jù)將以廣播方式上網(wǎng)傳輸。3 TCP/IP 客戶服務(wù)器程序設(shè)計(jì)方法使用 TCP/IP 協(xié)議通訊,首先要指定通信方式為 TCP方式,將 Winsock 控件的 Protocol 屬性設(shè)置為 sckTCPProtocol. 然后,按 TCP通信協(xié)議規(guī)定,先要申請(qǐng)建立網(wǎng)絡(luò) 連接,然后才能傳輸數(shù)據(jù)。3.1 服務(wù)器程序開始偵聽網(wǎng)絡(luò)服務(wù)器程序窗體中有三個(gè) Winsock 控件, Name分別為 sckServer
26、 、sckBusy 和 sckListen.其中 sckListen 是偵聽控件; sckBusy 是; sckServer 連接控件。偵聽控件和連接 控件不能是同一個(gè) Winsock 控件。服務(wù)器程序必須首先偵聽網(wǎng)絡(luò),等待客戶的連接申請(qǐng),才有可能建立網(wǎng)絡(luò)連接。服 務(wù)器程序開始偵聽網(wǎng)絡(luò)前,需要為偵聽用( sckListen )控件的 LocalPort 屬性設(shè)置通 信接口,然后調(diào)用 Listen 方法。服務(wù)器程序開始偵聽網(wǎng)絡(luò)的程序代碼如下:sckListen.LocalPort=4477 sckListen.Listen 偵聽網(wǎng)絡(luò)3.2 客戶程序申請(qǐng)連接 當(dāng)服務(wù)器程序已經(jīng)啟動(dòng)運(yùn)行并開始偵聽網(wǎng)絡(luò)
27、后,在客戶程序申請(qǐng)連接前,需要為客 戶 Winsock 控件的 RemodeHost屬性設(shè)置遠(yuǎn)程主機(jī),為 RemodePort 屬性設(shè)置通信接口, 然后再調(diào)用 Connect 方法向服務(wù)器程序申請(qǐng)連接。設(shè)置遠(yuǎn)程主機(jī)名,可以是計(jì)算機(jī)名也可是 IP 地址。如果是主機(jī)計(jì)算機(jī)名,則需要 系統(tǒng)翻譯為相應(yīng)的 IP 地址;如果是主機(jī) IP 地址,則直接進(jìn)行連接。申請(qǐng)連接的程序代碼如下:專業(yè) .專注.word 格式 .sckClient.Protocol = sckTCPProtocol 設(shè)置協(xié)議為 TCP方式IP 地址 代表本機(jī),與本機(jī)的實(shí)際地址無關(guān) sckClient.RemoteHo
28、st = 設(shè)置遠(yuǎn)程主機(jī)接口號(hào),該值必須與設(shè)置遠(yuǎn)程主機(jī)服務(wù)器程序的接口號(hào)一致 sckClient.RemotePort = 4477sckClient.Connect 申請(qǐng)連接3.3 服務(wù)器程序應(yīng)答連接請(qǐng)求服務(wù)器程序啟動(dòng)偵聽網(wǎng)絡(luò)后,當(dāng)客戶程序執(zhí)行 Connect 方法申請(qǐng)連接時(shí),服務(wù)器程 序的偵聽控件( sckListen )觸發(fā) ConnectionRequest 事件,并傳遞連接請(qǐng)求句柄。編 程人員需要在該當(dāng)事件程序中調(diào)用連接控件( sckServer )的 Accept 方法實(shí)現(xiàn)連接。服務(wù)器程序應(yīng)答連接的程序代碼如下:Private Sub sck
29、Listen_ConnectionRequest(ByVal requestID As Long) sckServer.Accept requestID 應(yīng)答連接請(qǐng)求 End Sub當(dāng)服務(wù)器程序執(zhí)行 Accept 方法建立連接后, 客戶程序中的接連控件將觸發(fā) Connect 事件通報(bào)連接完成,否則觸發(fā) Error 事件通報(bào)連接失敗??梢栽谠撌录绦蛑屑尤脒B接 后的處理程序。如果要求服務(wù)器程序支持多用戶連接,則需要?jiǎng)?chuàng)建 Winsock 控件數(shù)組,在連接時(shí)動(dòng) 態(tài)生成 Winsock 控件與客戶程序建立連接。程序代碼應(yīng)修改如下:Private Sub sckListen_ConnectionRequ
30、est(ByVal requestID As Long)Dim i As LongIf CurNumberMaxNumber Then MaxNumber 為最大連接數(shù), CurNumber為當(dāng)前連接數(shù) For i = 1 To CurNumberIf sckServer(i).State = 0 Then 判斷是否有空閑 Winsock 控件Exit ForEnd IfNext iIf i = CurNumber ThenCurNumber = CurNumber + 1i = CurNumber End If專業(yè) .專注.word 格式 .Load sckServer(i) 動(dòng)態(tài)加載 Wi
31、nsock 控件 sckServer(i).Accept requestIDExit SubEnd IfsckBusy.Close sckBusy.Accept requestIDEnd Sub3.4 傳送數(shù)據(jù) 當(dāng)服務(wù)器程序和客戶程序連接成功后,可以開始傳送數(shù)據(jù)。建立連接后的服務(wù)器程 序和客戶程序都可以發(fā)送或接收數(shù)據(jù)。當(dāng)一方要發(fā)送數(shù)據(jù)時(shí),調(diào)用SendData 方法。Dim SendStr As String SendStr = 連接成功! Winsock1.SendData SendStr 傳送數(shù)據(jù) 如果一方發(fā)送了數(shù)據(jù),在連接的另一方控件將產(chǎn)生 DataArrival 事件,在DataArri
32、val 事件處理程序中需要調(diào)用 GetData 方法接收數(shù)據(jù)。接收數(shù)據(jù)類型必須與發(fā) 送數(shù)據(jù)的類型一致方可正確接收數(shù)據(jù)。接收數(shù)據(jù)的程序代碼如下:Dim RecStr As String sckClient.GetData RecStrPrint RecStr3.5 關(guān)閉連接 當(dāng)應(yīng)用程序結(jié)束數(shù)據(jù)傳送后,必須關(guān)閉連接,釋放系統(tǒng)資源。當(dāng)連接的一方關(guān)閉連 接時(shí),可以調(diào)用 Close 方法。關(guān)閉連接程序代碼如下:sckClient.Close 關(guān)閉連接一方執(zhí)行關(guān)閉連接后, 在連接的另一方控件將產(chǎn)生 Close 事件。程序需要處理事件, 完成關(guān)閉連接的最后工作。該事件的處理代碼如下:Private Sub
33、sckServer_Close() sckServer(Index).Close 釋放接連 Unload sckServer(Index) 刪除控件 End Sub專業(yè) .專注.word 格式 .4 使用 UDP通信方式程序設(shè)計(jì)方法UDP 用戶報(bào)文協(xié)議是一個(gè)無連接協(xié)議,與 TCP協(xié)議操作不同, UDP協(xié)議不使用報(bào)文 確認(rèn)機(jī)制,不對(duì)報(bào)文排序,不進(jìn)行流控,因而 UDP報(bào)文可能出現(xiàn)丟失、重復(fù)、亂序等現(xiàn) 象,但由于它的前期工作比 TCP少,計(jì)算機(jī)不建立連接,因而可以迅速地展開通信,一 般用于傳輸少量不重要的數(shù)據(jù)和信息。 Winsock 控件的 UDP通信方式是一種廣播方式, 當(dāng) UDP主機(jī)發(fā)送數(shù)據(jù)時(shí),
34、 網(wǎng)絡(luò)上所有其它主機(jī)都能收到數(shù)據(jù), UDP通信比 TCP方式簡(jiǎn)單, 由于 UDP不需要連接,所以沒有申請(qǐng)連接和關(guān)閉連接的過程。 UDP發(fā)送者忽略接收者是 否實(shí)際收到數(shù)據(jù),而接收者也忽略發(fā)送者是否已發(fā)送了數(shù)據(jù)。這使編寫UDP通信方式的網(wǎng)絡(luò)程序非常簡(jiǎn)單。4.1 設(shè)置服務(wù)器程序中 Winsock 控件的屬性 在服務(wù)器程序中,需要為 Winsock 控件的 LocalPort 屬性設(shè)置通信接口:sckserver.LocalPort=44774.2 客戶程序發(fā)送數(shù)據(jù)當(dāng) UDP主機(jī)要發(fā)送數(shù)據(jù)時(shí),可調(diào)用 SendData 方法。發(fā)送數(shù)據(jù)程序的代碼如下:Dim SendStr As StringSendSt
35、r = 發(fā)送信息! sckClient.SendData SendStr 傳送數(shù)據(jù)vb 映射已知服務(wù)器的方法VB 設(shè)定/ 取消 網(wǎng)絡(luò)磁盤 使用方法:建立連線Function AddConnection(ByVal RemoteLocation As String,ByValLocalDriverAs String,ByValPasswdAsString,ByValUserName AsString) As Boolean專業(yè) .專注.word 格式 .RemoteLocation : 為網(wǎng)絡(luò)磁盤原始來源,格式為 RemoteComputerShareDirectoryLocalDriver :
36、 對(duì)應(yīng)本機(jī)的磁盤代號(hào),如: H: Passwd : 存取網(wǎng)絡(luò)磁盤的 Password, 傳 Null 表示不 用密碼UserName : 存取網(wǎng)絡(luò)磁盤的使用者代號(hào) 成功時(shí)傳回 True ,否則為 False例:Call AddConnection(Shihcmias, x:, vbNullString, cww)取消連線Function CancelConnection(ByVal LocalDriver As String, _ByVal ForceClose As Boolean) As BooleanLocalDriver : 對(duì)應(yīng)本機(jī)的磁盤代號(hào),如: H:ForceClose : Tr
37、ue 表示強(qiáng)迫結(jié)束連線,而不管有沒有程式正與之 連線成功時(shí)傳回 True ,否則為 False例:Call CancelConnection(x:, True)以下在 .basOption ExplicitType NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As String lpRemoteName As String lpComment As String lpProvider As String專業(yè) .專注.word 格式 .End TypeDe
38、clareFunctionWNetAddConnection2 Libmpr.dllAliasWNetAddConnection2A(lpNetResource AsNETRESOURCE,ByVallpPasswordAs String, ByVal lpUserNameAs String,ByValdwFlags AsLong) AsLongDeclareFunctionWNetCancelConnection2 Libmpr.dllAliasWNetCancelConnection2A (ByVal lpName As String, ByVal dwFlagsAs Long, ByVa
39、l fForce As Long) As LongDeclare Function WNetGetLastError Lib mpr.dll Alias WNetGetLastErrorA (lpError As Long, ByVal lpErrorBuf As String, ByVal nErrorBufSize As Long, ByVal lpNameBuf As String, ByVal nNameBufSize As Long) As LongPublic Const RESOURCE_PUBLICNET = &H2Public Const RESOURCETYPE_ANY = &H0Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0Public Const RESOURCEUSAGE_CONNECTABLE = &H1Public Const CONNECT_UPDATE_PROFILE = &H1Pu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 把握青春珍惜友誼教學(xué)計(jì)劃
- 2025防安全工作計(jì)劃
- 企管部年度工作計(jì)劃報(bào)告
- 老寨完小2025年春季學(xué)期數(shù)學(xué)教研工作計(jì)劃
- 供銷社企業(yè)改制發(fā)展計(jì)劃
- 學(xué)生素養(yǎng)教育教學(xué)計(jì)劃
- 2025小學(xué)教務(wù)處年度工作計(jì)劃2
- 月份工作總結(jié)范文與下月計(jì)劃
- 《計(jì)算機(jī)圖形學(xué)基礎(chǔ)與CAD開發(fā)》課件-第3章 二維圖形處理技術(shù)
- 2020版 滬教版 高中音樂 必修4音樂編創(chuàng) 下篇《第三單元 蹙金結(jié)繡》大單元整體教學(xué)設(shè)計(jì)2020課標(biāo)
- 語 文病句專題講練-2024-2025學(xué)年統(tǒng)編版語文七年級(jí)上冊(cè)
- 第三單元(復(fù)習(xí)課件)一年級(jí)語文上冊(cè)(統(tǒng)編版2024秋)
- 2024年大學(xué)試題(計(jì)算機(jī)科學(xué))-數(shù)字圖像處理考試近5年真題集錦(頻考類試題)帶答案
- 文旅深度融合長(zhǎng)期發(fā)展規(guī)劃
- ASTM-D3359-(附著力測(cè)試標(biāo)準(zhǔn))-中文版
- 5 協(xié)商決定班級(jí)事務(wù) (教學(xué)設(shè)計(jì))-2024-2025學(xué)年道德與法治五年級(jí)上冊(cè)統(tǒng)編版
- 2024年清潔機(jī)器人項(xiàng)目合作計(jì)劃書
- 高校實(shí)驗(yàn)室安全通識(shí)課學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 銀行客戶經(jīng)理招聘面試題與參考回答(某大型集團(tuán)公司)
- 殘疾人體育活動(dòng)推廣與普及考核試卷
- 《安全系統(tǒng)工程》期末考試卷及答案
評(píng)論
0/150
提交評(píng)論