一、WinSock簡介
Socket(套接字)最初是由加利福尼亞大學Berkeley(伯克利)分校為UNIX操作係統開發的網絡通信接口,隨著UNIX的廣泛使用,Socket成為當前最流行的網絡通信應用程序接口之一。20世紀90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等幾家公司共同定製了一套標準,即Windows Socket規範,簡稱WinSock。
VB編寫網絡程序主要有兩種方式:1.winsock控件 2.winsockAPI
二、WinSock控件的使用
1.WinSock控件的主要屬性
a.Protocol屬性
通過Protocol屬性可以設置WinSock控件連接遠程計算機使用的協議。可選的協議是TCP和UDP對應的VB的常量分別是sckTCPProtocol和sckUDPProtocol,Winsock控件默認協議是TCP。注意:雖然可以在運行時設置協議,但必須在連接未建立或斷開連接後。
b.SocketHandle屬性
SocketHandle返回當前socket連接的句柄,這是隻讀屬性。
c.RemoteHostIP屬性
RemoteHostIP屬性返回遠程計算機的IP地址。在客戶端,當使用了控件的Connect方法後,遠程計算機的IP地址就賦給了RemoteHostIP屬性,而在服務器端,當ConnectRequest事件後,遠程計算機(客戶端)的IP地址就賦給了這個屬性。如果使用的是UDP協議那麼當DataArrival事件後,發送UDP報文的計算機的IP才賦給了這個屬性。
d.ByteReceived屬性
返回當前接收緩衝區中的字節數
e.State屬性
返回WinSock控件當前的狀態
常數 值 描述
sckClosed 0 缺省值,關閉。
SckOpen 1 打開。
SckListening 2 偵聽
sckConnectionPending 3 連接掛起
sckResolvingHost 4 識別主機。
sckHostResolved 5 已識別主機
sckConnecting 6 正在連接。
sckConnected 7 已連接。
sckClosing 8 同級人員正在關閉連接。
sckError 9 錯誤
2.WinSock主要方法
a.Bind方法
用Bind方法可以把一個端口號固定為本控件使用,使得別的應用程序不能再使用這個端口。
b.Listen方法
Listen方法隻在使用TCP協議時有用。它將應用程序置於監聽檢測狀態。
c.Connect方法
當本地計算機希望和遠程計算機建立連接時,就可以調用Connect方法。
Connect方法調用的規範為:
Connect RemoteHost,RemotePort
d.Accept方法
當服務器接收到客戶端的連接請求後,服務器有權決定是否接受客戶端的請求。
e.SendData方法
當連接建立後,要發送數據就可以調用SendData方法,該方法隻有一個參數,就是要發送的數據。
f.GetData方法
當本地計算機接收到遠程計算機的數據時,數據存放在緩衝區中,要從緩衝區中取出數據,可以使用GetData方法。GetData方法調用規範如下:
GetData data,[type,][maxLen]
它從緩衝區中取得最長為maxLen的數據,並以type類型存放在data中,GetData取得數據後,就把相應的緩衝區清空。
g.PeekData方法
和GetData方法類似,但PeekData在取得數據後並不把緩衝區清空。
3.Winsock控件主要事件
a.ConnectRequest事件
當本地計算機接收到遠程計算機發送的連接請求時,控件的ConnectRequest事件將會被觸發。
b.SendProgress事件
當一端的計算機正在向另一端的計算機發送數據時,SendProgress事件將被觸發。SendProgress事件記錄了當前狀態下已發送的字節數和剩餘字節數。
c.SendComplete事件
當所有數據發送完成時,被觸發。
d.DataArrival事件
當建立連接後,接受到了新數據就會觸發這個事件。注意:如果在接受到新數據前,緩衝區中非空,就不會觸發這個事件。
e.Error事件
當在工作中發生任何錯誤都會觸發這個事件。