用VB5 Winsock控制元件建立TCP/IP通訊程式
隨著Windows 95中文版和Windows NT Server 4.0中文版的流行, Microsoft公司推出了相應平臺上的開發軟體: Visual Basic 5.0 中文企業 版。它為Windows環境下的網路開發提供了強大的工具,Winsock控制元件就是其中之一。
Winsock控制元件建立在TCP、UDP協議的基礎上,完 成與遠端計算機的通訊。即使對TCP/IP不太熟悉的使用者,使用該控制元件也可以在十幾分鍾內建立一個簡單的客戶機/伺服器程式。下面我們對Winsock控 件的事件、方法、屬性按其在程式中出現的順序分別作詳細的介紹,以便更好地理解程式原始碼。
伺服器程式的實現過程是:
(1)伺服器程式必須設定好LocalPort屬性,作為偵聽埠,該值為一個整數(只要是一個其它TCP/IP應用程式沒有使用過的值即可)。
(2)使用Listen方法進入偵聽狀態,等待客戶機程式的連線請求。
(3)客戶機程式發出連線請求,使伺服器程式產生ConnectionRequest事件,該事件得到一個引數requestID。
(4)伺服器程式用Accept方法接受客戶機程式的requestID請求。這樣,伺服器程式就可以用SendData方法傳送資料了。Accept方法必須用上一步得到的requestID作為其引數。
(5)當伺服器程式接收到資料時,產生DataArrival事件,引數BytesTotal包含接收到的資料位元組數。在該事件中,可以用GetData方法接收資料。
(6)如果接受到Close事件,則用Close方法關閉TCP/IP連線。
客戶機程式的實現過程是:
(1) 客戶程式設定Remotehost屬性,以便指定執行伺服器程式的主機 名,該字串可在“控制皮膚|網路|標識|計算機名”中查到。
(2) 設定RemotePort屬性,以便指定伺服器程式的偵聽埠。
(3)使用Connect方法,向伺服器提出連線請求。
(4)伺服器接受客戶機程式的請求,客戶機程式產生Connect事件,就可以用SendData方法傳送資料了。
(5)當客戶機程式接收到資料時,產生DataArrival事件,引數BytesTotal包含接收到的資料位元組數。在該事件中,可以用GetData方法接收資料。
(6)如果接受到Close事件,則用Close方法關閉連線。
Winsock控制元件還有兩個重要的屬性,即 Protocol和State。Protocol設定使用的協議是TCP還是UDP:取值sckTCPProtocol表示TCP, 取值sckUDPProtocol則表示UDP。因為Winsock控制元件的預設設定是sckTCPProtocol,所以程式中並沒有使用 Protocol屬性。State屬性反映的是當前TCP/IP的連線狀態,取值如表1所示。
表1 Winsock控制元件的State屬性及其描述
常數 值 描述
sckClosed 0 預設值,關閉。
SckOpen 1 開啟。
SckListening 2 偵聽
sckConnectionPending 3 連線掛起
sckResolvingHost 4 識別主機。
sckHostResolved 5 已識別主機
sckConnecting 6 正在連線。
sckConnected 7 已連線。
sckClosing 8 同級人員正在關閉連線。
sckError 9 錯誤。
先在一臺計算機上執行伺服器程式,此時視窗上只有一個“退出”按鈕。 再在另一臺計算機上執行客戶機程式,在“連線”按鈕右邊的文字框中輸入伺服器 的主機名後單擊“連線”按鈕。如果連線成功,則伺服器和客戶機程式視窗都會出現兩個文字框。這時,兩端都可以在上面的文字框中輸入文字,這些文字會立即在 下面的文字框中出現。
伺服器程式使用的控制元件如下:
(1)Command1:退出按鈕;
(2)textsend:傳送資料文字框;
(3)Winsockserver: 伺服器Winsock;
(4)textget :接收資料文字框。
伺服器程式的介面如圖所示。
伺服器程式的原始碼如下:
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
textsend.Visible = False
textget.Visible = False
Winsockserver.LocalPort = 1001
Winsockserver.Listen
End Sub
Private Sub textsend_Change()
Winsockserver.SendData textsend.Text
End Sub
Private Sub Winsockserver_Close()
Winsockserver.Close
End
End Sub
Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
textsend.Visible = True
textget.Visible = True
If Winsockserver.State <> sckClosed Then Winsockserver.Close
Winsockserver.Accept requestID
End Sub
Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String
Winsockserver.GetData tmpstr
textget.Text = tmpstr
End Sub
客戶機程式使用的控制元件如下:
(1)Command1:退出按鈕;
(2)Command2:連線按鈕;
(3)Winsockclient:客戶Winsock;
(4)Text1:主機名文字框;
(5)Textsend:傳送資料文字框;
(6)Textget:接收資料文字框; 客戶機程式的介面如圖所示。
客戶機程式的原始碼如下:
Private Sub Command1_Click()
End
End Sub
Private Sub Command2_Click()
Winsockclient.Connect
End Sub
Private Sub Form_Load()
textsend.Visible = False
textget.Visible = False
Winsockclient.RemotePort = 1001
Winsockclient.RemoteHost = "sccdsz"
End Sub
Private Sub Text1_Change()
Winsockclient.RemoteHost = Text1.Text
End Sub
Private Sub textsend_Change()
Winsockclient.SendData textsend.Text
End Sub
Private Sub Winsockclient_Close()
Winsockclient.Close
End
End Sub
Private Sub winsockclient_Connect()
textsend.Visible = True
textget.Visible = True
Command2.Visible = False
End Sub
Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String
Winsockclient.GetData tmpstr
textget.Text = tmpstr
End Sub
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-733996/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TCP/IP Winsock程式設計要點(轉)TCP程式設計
- TCP/IP 通訊傳輸流TCP
- TCP/IP的通訊過程-VeCloudTCPCloud
- 手把手教你 Socket 通訊(TCP/IP)TCP
- TCP/IP通訊程式設計的豐富多樣性(轉)TCP程式設計
- 圖形介面的TCP/IP簡單通訊TCP
- Java實現TCP通訊程式JavaTCP
- C#使用TCP/IP與ModBus進行通訊C#TCP
- TCP通訊TCP
- 分分鐘讀懂tcp/ip通訊協議原理(含視訊)TCP協議
- TCP/IP之TCP的建立與終止TCP
- modbus tcp通訊TCP
- TCP/IP--圖解從URL到網頁通訊原理TCP圖解網頁
- 網路通訊2:TCP通訊實現TCP
- 網路通訊3:TCP互動通訊TCP
- 網路通訊2:TCP簡單通訊TCP
- 網路通訊——socket(TCP/IP).Http,同步和非同步的區別TCPHTTP非同步
- Linux TCP通訊示例LinuxTCP
- Android TCP socket通訊AndroidTCP
- NModbus4 TCP通訊TCP
- TCP/IP基礎知識&Oracle的TCP/IP網路應用TCPOracle
- 通訊協議:HTTP、TCP、UDP協議HTTPTCPUDP
- Linux中的TCP通訊LinuxTCP
- Windows Socket程式設計精華《TCP通訊伺服器》Windows程式設計TCP伺服器
- Android Studio 建立aidl檔案,用於程式間通訊AndroidAI
- 系列TCP/IP協議-TCP建立與終止連線(012)TCP協議
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- socket通訊的建立
- C語言實現TCP通訊C語言TCP
- 網路通訊4:TCP廣播TCP
- Go語言實現TCP通訊GoTCP
- Vert.x TCP 通訊實踐TCP
- QT下控制檯TCP通訊例程QTTCP
- 西門子PLC Modus TCP通訊TCP
- Linux學習/TCP Socket通訊LinuxTCP
- QT從入門到入土(九)——TCP/IP網路通訊(以及檔案傳輸)QTTCP
- (redhat) 在tcp/ip層次上建立虛擬介面.RedhatTCP
- VC控制元件MSComm編寫串列埠通訊程式控制元件串列埠