关于WINSOCK多重连接的一个问题
每一个winsock控件只能做一个连接么
我试图在连接过程中对winsock的remotehost赋值说明错误
我想建立一个几百个连接的server必须要用几百个winsock控件么
因为连接开始必须判断一下方是否在线,而且连接数据时都是献给对方一个信号
感觉能否动态改变winsock的remotehost值
谢谢
问题点数:0、回复次数:9Top
1 楼Fnems(Fnems)回复于 2003-08-03 12:02:59 得分 0
使用控件数组啊。Top
2 楼3661512(.Net)回复于 2003-08-03 12:43:52 得分 0
改变了remotehost值也没用,WINSOCK是用来通讯用的,当然要随时保持连接状态才能通信.
可以动态加载winsock控件,一个winsock专门用来监听,有一个连接请求就load 一个winsock控件,然后建立之间的连接.如果你确认两台机器间不需要通信了,可以先close,再连接其它机器.Top
3 楼chinasdust(我哦)回复于 2003-08-03 13:18:11 得分 0
我在form.load()中就把winsock 关闭了
动态加载怎么用Top
4 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-08-03 15:57:17 得分 0
winsock1(0).localport="3333"
winsock1(0).listen
for i=1 to 10
load winsock1(i)
nextTop
5 楼dyx(天火)回复于 2003-08-04 20:50:25 得分 0
接受多个连接请求
通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用 Accept 方法。
下面的代码假定名为 sckServer 的窗体上有一个 Winsock 控件,它的 Index 属性被设置为 0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量 intMax。在窗体的 Load 事件中,intMax 被设置为 0,数组中第一个控件的 LocalPort 属性被设置为 1001。然后调用控件的 Listen 方法,使之成为“监听”控件。在连接请求到达时,代码将检测 Index 是否为 0(“监听”控件的值)。如果为 0,监听控件将增加 intMax 的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。
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
Top
6 楼heng_s(渣渣)回复于 2003-08-05 10:08:43 得分 0
你这样子用不了多久系统就要报内存不足了:)
Private Sub sckTax_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim I As Integer
Dim J As Integer
I = sckTax.UBound
If I = 0 Then
J = I + 1
Else
For J = 1 To I
If sckTax(J).State = sckClosed Then Exit For
Next J
End If
If J = I + 1 Then Load sckTax(J)
sckTax(J).Accept requestID
End SubTop
7 楼xdie(小蝶)回复于 2003-08-06 05:34:32 得分 0
作为一个折中考虑,可以将dyx(天火)朋友的
代码里加入一个常数MAX_CONTROL,其值为最多
可以load的控件个数。如果intMax > MAX_CONTROL
就使用heng_s(渣渣)提供的搜索方法搜索空闲的
winsock控件。如果仍未找到,则连接失败。
;)Top
8 楼zjkuki(酷奇)回复于 2003-08-06 10:06:12 得分 0
在VB里用控件数组的很不爽,VB一个FORM里面最多只能放255个控件。也就是说可以做两百多个WINSOCK的连接Top
9 楼alicky(周松)回复于 2003-08-06 10:28:32 得分 0
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 SubTop



