浅谈VB中Winsock控件的使用
时间:2020-09-18 08:02:11 来源:达达文档网 本文已影响 人
摘要 WinSock是VB中创建网络应用程序的重要控件,本文就WinSock控件常用的属性和方法进行剖析,并结合实例说明。
关键词 VB;WinSock;网络应用程序
中图分类号TP393文献标识码A文章编号 1674-6708(2010)30-0236-01
1 Winsock控件简介
在VB中我们通常利用WinSock控件可以与远程计算机建立连接,并通过用户数据文报协议 (UDP)或者传输控制协议 (TCP)进行数据交换,这两种协议都可以用来创建客户与服务器应用程序。
2 Winsock控件常用属性和方法的剖析
1)RemoteHost属性:远程主机的地址,LocalPort、RemotePort分别本地主机的端口和远程主机端口,对客户来说,该属性指定发送数据的本地端口,而对于服务器来说,这是用于侦听的本地端口,我们在设置这两个属性时必须保证两台主机的端口值相同;
2)LocalIP属性:用于返回本地机的 IP 地址,格式IP地址加点的字符串 (xxx.xxx.xxx.xxx);
3)Bind 方法:其作用是为控件“保留”一个本地端口;
4)SendData方法:用于发送一条数据给另一台主机,其语法是:WinSock.SendData [要发送的数据];
5)GetData 方法:当DataArrival事件出现时,代码调用 GetData方法获取数据,并将数据存储在字符串变量中。使用语法是:WinSock.GetData [接收数据的变量]。
3 使用WinSock控件实现的聊天室主要程序段
3.1 主要控件说明
3.2 主机之间连接程序
Private Sub cmdConnect_Click()
On Error GoTo ErrHandler
With Winsock1
.RemoteHost = Trim(txtRemoteIP)
.RemotePort = Trim(txtRemotePort)
If .LocalPort = Empty Then
.LocalPort = Trim(txtLocalPort)
Frame2.Caption = .LocalIP
.Bind .LocalPort
End If
End With
StatusBar1.Panels(1).Text = " Connected to " & Winsock1.RemoteHost & " "
Exit Sub
ErrHandler:
MsgBox "Winsock failed to establish connection with remote server", vbCritical
End Sub
3.3 窗体初始化程序
Private Sub Form_Load()
Show
MsgBox "Winsock UDT Chat" & vbCrLf & "by Theo Kandiliotis (ionikh@hol.gr)" & vbCrLf & vbCrLf & "F1 for help.", vbInformation
txtRemoteIP = Winsock1.LocalIP
End Sub
3.4 TEXT2输入框的KeyPress事件
Private Sub Text2_KeyPress(KeyAscii As Integer)
Static Last_Line_Feed As Long
Dim New_Line As String
If Trim(Text2) = vbNullString Then Last_Line_Feed = 0
If KeyAscii = 13 Then
New_Line = Mid(Text2, Last_Line_Feed + 1)
Last_Line_Feed = Text2.SelStart
Winsock1.SendData New_Line
StatusBar1.Panels(2).Text = "Sent " & (LenB(New_Line) / 2) & " bytes"
End If
End Sub
3.5 WINSOCK 接收到新的数据时的响应
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim New_Text As String
Winsock1.GetData New_Text
Text1.SelText = New_Text
StatusBar1.Panels(2).Text = "Recieved " & bytesTotal & " bytes"
End Sub
参考文献
[1]曾强聪.Visual Basic 6.0程序设计教程[M].北京:中国水利水电出版社,2003.