对服务器端可用一个WINSOCK控件数组方式,但最好是用两个,一个WINSOCK1 用来连接,另一个WINSOCK2用侦听!
代码如下,
1.FOR 可以首先自定一批连接用户上限。生成WINSOCK控件数组。当然也可以在WINSOCK2检测到连 接后在LOAD !
For i = 1 To 100
Load W1(i)
Next i
2.WINSOCK2侦听端口,当有客户端连接进来的时候,就会触发
W2.LocalPort = 4666
W2.Listen
‘-----------------------------------
Private Sub W2_ConnectionRequest(ByVal requestID As Long)
For i = 1 To 100 这时就可以判断,winsock1控件组有那个状态是未使用的。通过STATE状态来判断,但这种方式有偶尔造成客户端一些问题,此项为基础教程,不深究。
If W1(i).State = 0 Then
W1(i).Accept requestID ‘如果是未连接状态。将REQUESTID 这个连接给到W1进行连接。 REQUESTID 这里就是客户端的IP,端口会自动分配!
Exit For ’并结束FOR
End If
Next i
End Sub
当连接建立完成后,就会触发
Private Sub W1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
On Error Resume Next
Dim s() As Byte
Dim gh() As Byte
W1(Index).GetData s ’这里的S 产生过程(客户端发送请求后,客户端会有STATE的状态会发生改变,此时即可向服务器发送数据。此时这个数据就可以自己处理,收到客户端的数据后做什么操作
例如下例子:
If Mid(StrConv(s, vbUnicode), 1, 4) = "sxxx" Then
Label4.Caption = Val(Label4.Caption) + 1
List1.AddItem Mid(StrConv(s, vbUnicode), 5, Len(StrConv(s, vbUnicode)) - 3)
List2.AddItem Index
Text3.Text = Text3.Text & vbNewLine & Mid(StrConv(s, vbUnicode), 5, Len(StrConv(s, vbUnicode)) - 3) & " 上线了!"
For u = 1 To Val(Text4.Text)
If W1(u).State = 7 Then
W1(u).SendData "欢迎" & Mid(StrConv(s, vbUnicode), 5, Len(StrConv(s, vbUnicode)) - 3) & "上线!
End If
DoEvents
Next u
End If
End Sub
上面代码,做了一个当其中一个客户端上线的时候,广播给所有在线的成员!
对于客户端的动作
第一步,连接
W3.RemoteHost = "127.0.0.1" ‘指定服务器IP
W3.RemotePort = 4000 端口
W3.Connect 开始连接
If W3.State <> 9 Then 局域网测试,完全就可以直接写。 判断STATE状态。是否连接成功
MsgBox "连接服务器成功", 64, "提示"
Else
MsgBox "连接服务器失败", 64, "提示"
End If
’当连接成功后。直接使用 W3.SendData "我是一个上线数据“ 发送消息。!
同样,客户端也是通过
Private Sub W3_DataArrival(ByVal bytesTotal As Long)
Dim s As String
W3.GetData s
Text1.Text = s
End Sub
来接收数据。。。。。
以上就是一个非常 简单的客户端,和服务端的写法。