- 相關推薦
在VB中如何使用 Winsock 控件
在VB中如何使用 Winsock 控件
衡陽師范學院 徐雨明 郵編:421008 衡陽計量測試中心 肖 瓊 郵編:421007
摘要:本文介紹如何利用 WinSock 控件可以與遠程計算機建立連接,并通過用戶數(shù)據(jù)文報協(xié)議 (UDP)或者傳輸控制協(xié)議 (TCP)進行數(shù)據(jù)交換,并分別給出Winsock控件使用 UDP 協(xié)議和TCP協(xié)議進行遠程計算機連接的應用實例
關鍵詞:VB、控件、協(xié)議
1.引言
1.1 Winsock 控件可能的用途
創(chuàng)建收集用戶信息的客戶端應用程序,并將收集的信息發(fā)送到某中央服務器。
創(chuàng)建一個服務器應用程序,作為多個用戶的數(shù)據(jù)的匯入點。
創(chuàng)建“聊天”應用程序。
1.2 選擇通訊協(xié)議的標準
在使用 WinSock 控件時,首先需要考慮使用什么協(xié)議。可以使用的協(xié)議包括 TCP 和 UDP。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài):
(1、) TCP 協(xié)議控件是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比。在開始數(shù)據(jù)傳輸之前,用戶必須先建立連接。
(2、) UDP 協(xié)議是一種無連接協(xié)議,兩臺計算機之間的傳輸類似于傳遞郵件:消息從一臺計算機發(fā)送到另一臺計算機,但是兩者之間沒有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡。
到底選擇哪一種協(xié)議通常是由需要創(chuàng)建的應用程序決定的。下面的幾個問題將有助于選擇適宜的協(xié)議:
在收發(fā)數(shù)據(jù)的時候,應用程序是否需要得到客戶端或者服務器的確認信息?如果需要,使用 TCP 協(xié)議,在收發(fā)數(shù)據(jù)之前先建立明確的連接。
數(shù)據(jù)量是否特別大(例如圖象與聲音文件)?在連接建立之后,TCP 協(xié)議將維護連接并確保數(shù)據(jù)的完整性。不過,這種連接需要更多的計算資源,因而是比較“昂貴”的。
數(shù)據(jù)發(fā)送是間歇的,還是在一個會話內(nèi)?例如,如果應用程序在某個任務完成的時候需要通知某個計算機,UDP 協(xié)議是更適宜的。UDP 協(xié)議適合發(fā)送少量的數(shù)據(jù)。
1.3 協(xié)議的設置
在設計時,可以按如下方式設置應用程序使用的協(xié)議:在“屬性”窗口中單擊“協(xié)議”,然后選擇 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代碼來設置 Protocol 屬性,如下所示:
Winsock1.Protocol = sckTCPProtocol
1.4 確定計算機的名稱
在與遠程計算機相連接的時候,需要知道它的 IP 地址或者它的“計算機名”。IP 地址是一串數(shù)字,每三個數(shù)字為一組,中間用點隔開(形如 xxx.xxx.xxx.xxx)。通常,最易記住的是“計算機名”。
要確定“計算機名”,請按照以下步驟執(zhí)行:
(1)在計算機的“任務欄”上,單擊“啟動”。
(2)在“設置“項中,單擊“控制面板“。
(3)雙擊“網(wǎng)絡”圖標。
(4
)單擊“標識”選項卡。
(5)在“計算機名稱”框中可以找到計算機的名稱。
(6)上面找到的計算機名稱可以作為 RemoteHost 屬性的值。
2. Winsock控件使用 TCP 協(xié)議應用實例
如果應用程序要使用 TCP 協(xié)議,那么首先必須決定應用程序是服務器還是客戶端。如果要創(chuàng)建一個服務器端,那么應用程序需要“監(jiān)聽”指定的端口。當客戶端提出連接請求時,服務器端能夠接受請求并建立連接。在連接建立之后,客戶端與服務器端可以自由地互相通訊。
下列步驟創(chuàng)建一個非常簡單的服務器:
(1
) 要創(chuàng)建一個 TCP 服務器,請按照以下步驟執(zhí)行:
(2) 創(chuàng)建新的 Standard EXE 工程。
(3) 將窗體的標題改為“TCP 服務器”。
(4) 在窗體中放入一個 Winsock 控件(c:\windows\system\mswinsck.ocx),并將它的名字改為 tcpServer。
(5) 在窗體上添加兩個 TextBox 控件。將第一個命名為 txtSend,第二個為 txtOutput。
為窗體添加如下的代碼。
Private Sub Form_Load()
'將 LocalPort 屬性設置為一個整數(shù)。
'然后調(diào)用 Listen 方法。
tcpServer.LocalPort = 1001
tcpServer.Listen
End Sub
Private Sub tcpServer_ConnectionRequest (ByVal requestID As Long)
'檢查控件的 State 屬性是否為關閉的。
'如果不是,
'在接受新的連接之前先關閉此連接。
If tcpServer.State <> sckClosed Then _
tcpServer.Close
'接受具有 requestID 參數(shù)的'連接。
tcpServer.Accept requestID
End Sub
Private Sub txtSend_Change()
'名為 txtSend 的 TextBox 控件中
'包含了要發(fā)送的數(shù)據(jù)。當用戶往文本框中
'鍵入數(shù)據(jù)時,使用 SendData 方法
'發(fā)送輸入的字符串。
tcpServer.SendData txtSend.Text
End Sub
Private Sub tcpServer_DataArrival (ByVal bytesTotal As Long)
'為進入的數(shù)據(jù)聲明一個變量。
'調(diào)用 GetData 方法,并將數(shù)據(jù)賦予名為 txtOutput 的 TextBox 的 Text 屬性。
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub
上面的步驟創(chuàng)建了一個簡單的服務器應用程序。為了使它能夠工作,還必須為它創(chuàng)建一個客戶端的應用程序。
要創(chuàng)建 TCP 客戶端,請按照以下步驟執(zhí)行:
(1) 在工程中添加一個新的窗體。
(2) 將窗體的標題改為“TCP Client”。
(3)
【在VB中如何使用 Winsock 控件】相關文章:
VC 中靜態(tài)控件的特殊用法04-16
如何用VB存取SQL Server中的圖像數(shù)據(jù)04-12
VC++中靜態(tài)控件的特殊用法08-06
化學教學中如何正確使用多媒體08-02
淺談如何使用蘇教版語文教材中的插圖研究08-20