VB winsock 控件使用详解(客户端/服务端)

冰不孤独 2016-07-14 01:57:15
对服务器端可用一个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
来接收数据。。。。。


以上就是一个非常 简单的客户端,和服务端的写法。
...全文
5715 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBoy410 2017-02-04
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
刚接触TCP Socket,一头雾水,不知其因果。
闲_人 2016-08-14
  • 打赏
  • 举报
回复
能否共享下您的源码.我想学习学习.之前我也写过一些.但是总有一些东西不能满足..但是看您这个.已经包含了我大部分想写的功能.所以想学习下
赵4老师 2016-07-27
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧