首先确保窗口中winsock控件的index为0 Private Sub winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long) Load winsock(winsock.UBound + 1) winsock(winsock.UBound).Accept requestID '接受连接 End Sub
我以前写的TCP网络通讯程序form代码,你参考下(不过是没完成的项目 :) Public Sub chaxun(yonghu As String, ByRef mima As String, ByRef admin As Boolean, ByRef bl As Boolean) If con.State <> 0 Then con.Closecon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\kszc.mdb"shuju.Open "select * from listy ", con, adOpenKeyset, adLockOptimistic shuju.Find " 用户名 = '" & yonghu & "'" If Not (shuju.EOF) Then If shuju.Fields(1) = yonghu And shuju.Fields(2) = mima Then admin = shuju.Fields(3) bl = True mima = shuju.Fields(0) Else bl = False End If Else bl = False End If
End SubPrivate Sub Command1_Click()End SubPrivate Sub Form_Load() zhenting.LocalPort = 9012 zhenting.Listen Form2.Show MAXsok = 10End SubPrivate Sub ll_BeforeLabelEdit(Cancel As Integer)End SubPrivate Sub sok_Close(Index As Integer)sok(Index).Closesok(Index).Tag = "0" zxkh = zxkh - 1 xianshi.Panels(1) = "在线客户:" & zxkh For i = 1 To ll.ListItems.Count If ll.ListItems(i).SubItems(2) = Index Then List1.AddItem ll.ListItems(i) & "已离线,取消SOCK" ll.ListItems.Remove i End If NextEnd SubPrivate Sub sok_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim aa As String sok(Index).GetData aaIf Left(aa, 8) = "用户ks密码zc" ThenDim bb As String Dim ad As Boolean Dim cc As String Dim dd1 As Booleanaa = Right(aa, Len(aa) - 8) dd = Split(aa, "#")bb = dd(0)cc = dd(1) chaxun bb, cc, dd1, ad If ad = False Then sok(Index).SendData "用户ks密码zc错误" List1.AddItem Date & "时间:" & Time & "用户名为 " & bb & "的登陆信息错误,已取消连接并收回SOCK"DoEventssok(Index).Close sok(Index).Tag = "0" zxkh = zxkh - 1 Else If dd1 Then sok(Index).Tag = "2" List1.AddItem Date & "--" & Time & cc & "的服务端成功连接" sok(Index).SendData "用户ks密码zc正确" & cc Dim ll1 As ListItem Set ll1 = ll.ListItems.Add(, "ll" & Index, cc) ll1.ListSubItems.Add , "ll1" & Index, Time ll1.ListSubItems.Add , "ll2" & Index, IndexElse sok(Index).Tag = "1" List1.AddItem Date & "--" & Time & cc & "的客户端成功连接" sok(Index).SendData "用户ks密码zc正确" & ccEnd IfEnd IfEnd IfPrint aaEnd SubPrivate Sub Text1_Change()End SubPrivate Sub Timer1_Timer() xianshi.Panels(1) = "在线客户:" & zxkh xianshi.Panels(2) = Date xianshi.Panels(3) = Time End SubPrivate Sub zhenting_ConnectionRequest(ByVal requestID As Long) Dim aa As Long aa = 5 Call findsock(aa) sok(aa).Accept requestID List1.AddItem Date & "时间:" & Time & "连接成功,分配WINSOCK号:" & aa zxkh = zxkh + 1 xianshi.Panels(1) = "在线客户:" & zxkhEnd Sub Public Sub findsock(ByRef aa As Long) For i = 0 To MAXsok If sok(i).Tag = "0" Then sok(i).Tag = "1" aa = i Exit Sub End If Next Load sok(MAXsok + 1) MAXsok = MAXsok + 1 aa = MAXsokEnd Sub
你先在窗体上放一个winsock控件后,然后把index设为0,控件就自动设为数组.
在需要动态舔加的时候直接load出来就可以.
假设控件名字为Wsock
可以用 Load Wsock(1) 动态加载控件
如果还要加载下一个 Load Wsock(2)
Private Sub winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load winsock(winsock.UBound + 1)
winsock(winsock.UBound).Accept requestID '接受连接
End Sub
Public Sub chaxun(yonghu As String, ByRef mima As String, ByRef admin As Boolean, ByRef bl As Boolean)
If con.State <> 0 Then con.Closecon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\kszc.mdb"shuju.Open "select * from listy ", con, adOpenKeyset, adLockOptimistic
shuju.Find " 用户名 = '" & yonghu & "'"
If Not (shuju.EOF) Then
If shuju.Fields(1) = yonghu And shuju.Fields(2) = mima Then
admin = shuju.Fields(3)
bl = True
mima = shuju.Fields(0)
Else
bl = False
End If
Else
bl = False
End If
End SubPrivate Sub Command1_Click()End SubPrivate Sub Form_Load()
zhenting.LocalPort = 9012
zhenting.Listen
Form2.Show
MAXsok = 10End SubPrivate Sub ll_BeforeLabelEdit(Cancel As Integer)End SubPrivate Sub sok_Close(Index As Integer)sok(Index).Closesok(Index).Tag = "0"
zxkh = zxkh - 1
xianshi.Panels(1) = "在线客户:" & zxkh
For i = 1 To ll.ListItems.Count
If ll.ListItems(i).SubItems(2) = Index Then
List1.AddItem ll.ListItems(i) & "已离线,取消SOCK"
ll.ListItems.Remove i
End If
NextEnd SubPrivate Sub sok_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim aa As String
sok(Index).GetData aaIf Left(aa, 8) = "用户ks密码zc" ThenDim bb As String
Dim ad As Boolean
Dim cc As String
Dim dd1 As Booleanaa = Right(aa, Len(aa) - 8)
dd = Split(aa, "#")bb = dd(0)cc = dd(1)
chaxun bb, cc, dd1, ad
If ad = False Then
sok(Index).SendData "用户ks密码zc错误"
List1.AddItem Date & "时间:" & Time & "用户名为 " & bb & "的登陆信息错误,已取消连接并收回SOCK"DoEventssok(Index).Close
sok(Index).Tag = "0"
zxkh = zxkh - 1
Else
If dd1 Then
sok(Index).Tag = "2"
List1.AddItem Date & "--" & Time & cc & "的服务端成功连接"
sok(Index).SendData "用户ks密码zc正确" & cc
Dim ll1 As ListItem
Set ll1 = ll.ListItems.Add(, "ll" & Index, cc)
ll1.ListSubItems.Add , "ll1" & Index, Time
ll1.ListSubItems.Add , "ll2" & Index, IndexElse
sok(Index).Tag = "1"
List1.AddItem Date & "--" & Time & cc & "的客户端成功连接"
sok(Index).SendData "用户ks密码zc正确" & ccEnd IfEnd IfEnd IfPrint aaEnd SubPrivate Sub Text1_Change()End SubPrivate Sub Timer1_Timer()
xianshi.Panels(1) = "在线客户:" & zxkh
xianshi.Panels(2) = Date
xianshi.Panels(3) = Time
End SubPrivate Sub zhenting_ConnectionRequest(ByVal requestID As Long)
Dim aa As Long
aa = 5
Call findsock(aa)
sok(aa).Accept requestID
List1.AddItem Date & "时间:" & Time & "连接成功,分配WINSOCK号:" & aa
zxkh = zxkh + 1
xianshi.Panels(1) = "在线客户:" & zxkhEnd Sub
Public Sub findsock(ByRef aa As Long)
For i = 0 To MAXsok
If sok(i).Tag = "0" Then
sok(i).Tag = "1"
aa = i
Exit Sub
End If
Next
Load sok(MAXsok + 1)
MAXsok = MAXsok + 1
aa = MAXsokEnd Sub