VB如何使用Winsock进行1对多通信
01. 是不是建立几个连接就需要几个Winsock
02.自己有服务器的话如何做呢?是不是简单很多?具体怎样做?
03.自己没有服务器怎么做? 展开
推荐于2017-09-16 · 知道合伙人软件行家
VB可通过通过创建Winsock控件数组,使用一个控件Winsock也可以同时接受多个连接请求。不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用 Accept 方法。
提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。
代码实例:
下面的代码假定名为 sckServer 的窗体上有一个 Winsock 控件,它的 Index 属性被设置为0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量 intMax。在窗体的 Load 事件中,intMax 被设置为 0,数组中第一个控件的
LocalPort 属性被设置为 1001。然后调用控件的 Listen 方法,使之成为“监听”控件。在连接请求到达时,代码将检测 Index 是否为 0(“监听”控件的值)。如果为 0,监听控件将增加 intMax 的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求Option Explicit
Private intMax As Long
Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub
Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub
Winsock数组就是form中画一个Winsock,把index属性设置成0
private sub form_load()
Winsock(0).localport=5555 '服务器端口
Winsock(0).listen
end sub
'重要: 当ConnectionRequest时,加载一个Winsock,用新的Winsock响应,新的Winsock会继承新的Winsock(0)的端口属性
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load Winsock1(Winsock1.Ubound+1)
Winsock1(Winsock1.Ubound).Accept requestID
End Sub
'这样就可以了
02:同下
03:服务器比普通计算机性能好,不过假如通讯规模小,普通计算机就行了,再去设置一下"TCP并发连接数",具体通讯代码和服务器是 一样的.