Winsock控件可以供Microsoft Acess、Visual Basic,Visual C++或Visual Foxpro的開發人員使用。本文以Visual Basic 6企業版為開發環境來向大家介紹一下Winsock控件的初步應用。
Winsock控件可以使用兩種協議:TCP協議和UDP協議,下面來分別介紹。
TCP協議即數據傳輸協議,它允許創建和維護與遠程計算機的連接,使其彼此可以進行數據傳輸。利用TCP協議通訊必須分別建立客戶應用程序和服務器應用程序。
在創建客戶應用程序時,必須知道服務器計算機名或其IP地址(存于RemoteHost屬性)、及服務器計算機進行偵聽的端口(存于RemotePort屬性),然后調用Connect方法。
創建服務器應用程序時,就應相應設置一個偵聽端口(LocalPort屬性)并調用listen方法。當客戶機需要連接時(connect),就會發生ConnectionRequest事件。為了完成連接,你可以在ConnectionRequest事件中調用Accept方法。建立連接后,任何一方計算機都可以發送、接收對方數據。如果你要發送數據,需調用SendData方法。當接收到數據時,會發生DataArrival事件,調用DataArrival事件中的GetData方法就可以獲得對方傳送的數據。
如果只有兩臺計算機,那十分容易。假設甲機為客戶機,乙機為服務器,且其IP為192.192.192.1,接收端口為1200(任意選一個未被使用的端口即可)。首先在甲機客戶端程序中加入一個Winsock控件,起名為sckconnect,并設置其屬性:RemoteHost=“192.192.192.1”,(即甲機IP地址),RemotePort=1200(即甲機偵聽端口);再在乙機服務器程序中假如一個名為sckserver(0)的Winsock控件,其LocalPort=1200,
在乙機服務器程序中Form_Load()加入
sckserver(0).bind sckserver(0).LocalPort '與本地端口綁定
sckserver(0).listern ' 偵聽
如果要傳輸數據,兩機必須先建立連接。建立連接的程序如下:
甲機客戶機要先請求連接
sckconnect.connect sckconnect.RemoteHost, sckconnect.RemotePort
此句執行時會觸發服務器程序中的ConnectRequest事件,在此過程中決定是否建立連接,其代碼如下:
Private sub sckserver_connectionrequest(index as Integer,Byval requestid as long)
if sckserver.count=1 then
load sckserver(1)
sckserver(1).accept requestId
end if
end sub
連接建立好以后,甲機或乙機都可以應用SendData方法來傳送數據。例如,如果是甲機要傳送一個叫string的
字符串,只需在代碼中加入:
sckconnect.SendData string
甲機傳送數據后,會觸發乙機的DataArrival事件,在其過程中用GetData方法可以收到傳送的數據:
新聞熱點
疑難解答