一. 引入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