给你点关键代码吧 Private intMax As Long 'winsock最大的下标Private Sub Form_Load() intMax = 0 Winsock1(0).LocalPort = 7699 '本地监听的端口 Winsock1(0).ListenEnd Sub '************************************************************************* '**函 数 名:Winsock1_ConnectionRequest '**输 入:Index(Integer) - '** :ByVal requestID(Long) - '**输 出:无 '**功能描述:对方请求连接时候触发,当没有以前已经关闭的控件的winsock控件数组的话就创建 '**全局变量: '**调用模块: '**作 者:影子 '**日 期:2005-02-06 08:39:12 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) If Index = 0 Then Dim i As Integer Dim temp As Integer temp = 0 For i = 1 To intMax If Winsock1(i).State = 0 Then temp = i Exit For End If Next If temp = 0 Then intMax = intMax + 1 temp = intMax End If Load Winsock1(temp) Winsock1(temp).LocalPort = 0 Winsock1(temp).Accept requestID End IfEnd Sub
客户端在关闭连接前发送 winsock.close doevents 在服务器触发close事件 Private Sub Winsock1_Close(Index As Integer) winsock(index).close end sub2另外localport=0是怎么回事啊? 客户端必须这么写,因为你连接服务器端口,你自己的端口是随机指定的,你要是自己指定的话会出错的
可以通过他动态创建控件组,有什么烦的?
如:
Load winsock1(1) '创建了一个Index是1的控件
Load winsock1(2) '创建了一个Index是2的控件
...
Load winsock1(n) '创建了一个Index是n的控件Unload winsock1(1) '卸载了一个Index是1的控件
Unload winsock1(2) '卸载了一个Index是2的控件
...
Unload winsock1(n) '卸载了一个Index是1的控件只要你在winsock控件相应的事件中使用这些语句不就可以了。
详细的自己看 MSDN 吧
Private intMax As Long 'winsock最大的下标Private Sub Form_Load()
intMax = 0
Winsock1(0).LocalPort = 7699 '本地监听的端口
Winsock1(0).ListenEnd Sub
'*************************************************************************
'**函 数 名:Winsock1_ConnectionRequest
'**输 入:Index(Integer) -
'** :ByVal requestID(Long) -
'**输 出:无
'**功能描述:对方请求连接时候触发,当没有以前已经关闭的控件的winsock控件数组的话就创建
'**全局变量:
'**调用模块:
'**作 者:影子
'**日 期:2005-02-06 08:39:12
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) If Index = 0 Then
Dim i As Integer
Dim temp As Integer
temp = 0
For i = 1 To intMax
If Winsock1(i).State = 0 Then
temp = i
Exit For
End If
Next
If temp = 0 Then
intMax = intMax + 1
temp = intMax
End If
Load Winsock1(temp) Winsock1(temp).LocalPort = 0 Winsock1(temp).Accept requestID
End IfEnd Sub
你怎么回收以前连接后来短开的那些个winsock那?
2.在load新的控件前,循环检查一下有没有已经断开的连接(用一个数组来保存控件状态,连接或断来时都在数组里作标识,每次只循环检查数组即可,从第一个查起,当遇到第一个处理断开状态的标识时,用这个数组的index做控件的index来load控件)
不知道说清楚了没有.
winsock.close
doevents
在服务器触发close事件
Private Sub Winsock1_Close(Index As Integer)
winsock(index).close
end sub2另外localport=0是怎么回事啊?
客户端必须这么写,因为你连接服务器端口,你自己的端口是随机指定的,你要是自己指定的话会出错的