一. 引入ocx,
在vb编辑器中,按住ctrl+t,并在打开的部件窗口勾选microsoft winsocket control 6.0,并确定。
二.winsocket的常用属性和方法
- 属性:
- 1.Localip: 此属性值返回的是当前主机ip
- 2.localport: 此属性值返回的是当前占用端口号
- 3.proctocol: 此属性返回的是协议号
- 4.RemoteHost: 此属性返回的是远程主机的ip
- 5.Remoteport: 此属性返回的是远程主机的端口号
- 6.BytesReceived: 此属性返回接收的数据字节数
- 7.state: 此属性返回当前的状态,常用的值:0-未连接 6-连接中 7-连接成功 9-连接失败
-
- 方法:
- connect: 这个方法主要用于客户端,向后端递交连接的请求
- Close: 这个方法用于关闭winsock的连接
- SendData: 这个方法用于发送数据包(基于socket属性=7的情况)
- GetData: 这个方法用于接收数据包(基于socket属性=7的情况)
- Listen: 这个方法主要用在后端,用于打开监听,客户端的请求
- Accept: 这个方法用在后端ConnectionRequest事件中,接收用户连接的请求,在后面要跟上requestID
三.winscock的常用事件
1.Connect:在winsocket.connect后触发,触发时state属性会随之改变
2.ConnectionRequest:这个属性在远程主机发送connect时改变这时,允许请求的写法为
- Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
- If Winsock1.State <> sckClosed Then '如果状态不属于关闭模式,则保持接收连接
- Winsock1.Close
- Winsock1.Accept requestID
- end if
- end sub
3.DataArrival:在远程主机发送数据后触发,vb可以在这个属性中接收接收远程主机发送的数据,接收字符串一般会乱码,我们可以这样写
- Private Sub Winsock1_DataArrival( ByVal bytesTotal As Long)
- Dim bb() As Byte '定位bb数组为byte数据类型
- Winsock1.GetData bb() ’把得到的数据放到bb数组中
- data1 = StrConv(bb(), vbUnicode) '将接收的数据转为unicode字符
- print data1 '输出的即为字符串
- end sub
4.SendProgress:在senddata方法中触发
5.SendComplete:在发送数据包(senddata)完成后触发
6.Error:在socket通信中出现任何错误都会出现,输出产生错误错误号和错误描述的方法如下
- Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
- debug.print "错误号" & number
- debug.print "描述" & Description
- End Sub