陈 翀
摘要在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.