摘要在VB語言設計中 Winsock控件對用戶是不可視的,可以很容易地訪問TCP和UDP網絡服務。要編寫客戶和服務器應用程序,不需要了解TCP或調用底層Winsock API的具體細節。通過設置Winsock控件的屬性和調用該控件的方法,可以很容易地連接到遠程計算機并進行雙向的數據交換。
關鍵詞VB Winsock
中圖分類號:TP3文獻標識碼:A
1 VB語言的簡介
20世紀70年代末,Microsoft在當時的PC機上開發了第一代的Basic語言,隨著Windows操作系統的不斷成熟,Visual Basic產品由1.0版升級到3.0版,此時 Visual Basic已初具規模了。
隨著Internet的迅猛發展,Microsoft的ActiveX技術出現了,并被不失時機地加入到 Visual Basic 5.0版本中(1997年)。在1998年,Microsoft推出了Visual Basic 6.0版本,這一版本使VB得到了很大的擴充和增強。它還引入了使用部件編程的概念。迄今為止,Visual Basic已經發展成為快速應用程序開發工具的代表。
2 連接測試
此程序分別安裝在兩臺不同計算機上,并連接在LAN上,一臺為主機,一臺為客戶機。主機一直監聽所設定的端口。客戶機上設主機的IP,設好主機端口,點擊連接鍵,客戶機就與主機連接。并可互相發送信息。
2.1 設法連接主機
Private Sub cmdConnnect_Click()
cmdListen.Enabled = False
WinsockConnectTest.Close
WinsockConnectTest.Connect txtIPaddress.Text, txtTestPort
lblConnectionStatus.Caption = \"通過端口 \" txtTestPort.Text \" 連接 \" txtIPaddress.Text \"<|||>\" \"Connecting to \" txtIPaddress.Text \" on port \" txtTestPort.Text
Timer1.Enabled = True
End Sub
2.2 監聽試圖連接你的主機
Private Sub cmdListen_Click()cmdConnnect.Enabled = False
WinsockConnectTest.Close
WinsockConnectTest.LocalPort = txtTestPort.Text
WinsockConnectTest.Listen
lblConnectionStatus.Caption = \"正在監聽/Listening on port \" txtTestPort.Text
End Sub
2.3 檢查網絡是否連接
Private Sub lblCheckConnection_Click()
If Not WinsockConnectTest.State = 7 Then
lblCheckConnection.Caption = \"連接/Connected: 否/No\"
Else
lblCheckConnection.Caption = \"連接/Connected: 是/Yes\"
End If
End Sub
2.4 當客戶機試圖連接主機時,程序將關注連接狀態
Private Sub Timer1_Timer() '
If Not WinsockConnectTest.State = 7 Then
lblConnectionStatus.Caption = \"連接失敗/Connection Failed\"
WinsockConnectTest.Close
cmdConnnect.Enabled = True
cmdListen.Enabled = True
Timer1.Enabled = False
Else
If cmdListen.Enabled = True Then
lblConnectionStatus.Caption = \"連接/Connected\"
End If
End If
End Sub
2.5 當連接時,WinsockConnectTest.SendData將數據發送出去
Private Sub cmdSendDataServer_Click()
If WinsockConnectTest.State = 7 Then
Dim SendDataServer As String
SendDataServer = txtSendData.Text
WinsockConnectTest.SendData SendDataServer
Else
Beep
End If
End Sub
2.6 當接收到數據時,WinsockConnectTest.GetData將數據轉為字符,并顯示
Private Sub WinsockConnectTest_DataArrival(ByVal bytesTotal As Long)
Dim ServerData As String
WinsockConnectTest.GetData ServerData, (下轉第186頁)(上接第182頁)vbString
txtDataServer.SelStart = Len(txtDataServer.Text)
txtDataServer.SelText = ServerData vbCrLf
End Sub
3 端口掃描
本程序的這個功能為掃描當前所打開的端口,并將其端口號顯示在列表中。在“主機IP地址”框中設置好要主機IP。選擇是本地還是互聯網掃描,設置所要掃描端口的范圍和掃描速度。點擊掃描運行程序:
掃描端口主要代碼
Private Sub CmdScan_Click()
PortLow = txtPortLow.Text '起始端口號
PortHigh = txtPortHigh.Text '中止端口號
TimerScanner.Enabled = False
If Pause = True Then
lblShowsatwhatPort.Caption = \"端口號/Port: \" AtPort \" 暫停/Pause\"
Exit Sub
End If
If Start = \"No\" Then
Exit Sub
End If
If AtPort = PortHigh Then '檢查是否掃描到所設定的最后一個端口:
Exit Sub
End If
CmdScan.Enabled = False
If optLocal.Value = True Then '如果這個為本地掃描,另一個則為互聯網掃描:
Do
If Start = \"No\" Then
Exit Sub
End If
WinsockPortScanner.Close
DoEvents
WinsockPortScanner.Connect txtIPHostscanner.Text, AtPort
DoEvents
參考文獻
[1] 龔沛曾,陸慰民,楊志強.Visual Basic程序設計教程.高等教育出版社,2000.7.
[2] 鄧文新,張桂香.Visual Basic程序設計方法.北京航空航天大學出版社,2003.1.