vb使用winsock控件,服务器怎么动态建立winsock控件数组,能给几行代码吗?是不是第一次必须的建立2个winsock控件以后才能动态建立winsock控件数组

解决方案 »

  1.   

    参考:http://www.m5home.com/blog/article.asp?id=169这个服务器端就是你说的那种结构.
      

  2.   

    不用的.
    你先在窗体上放一个winsock控件后,然后把index设为0,控件就自动设为数组.
    在需要动态舔加的时候直接load出来就可以.
    假设控件名字为Wsock
    可以用 Load Wsock(1) 动态加载控件
    如果还要加载下一个 Load Wsock(2)
      

  3.   

    搜索winsock,楼主会有很大收获的!
      

  4.   

    首先确保窗口中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
      

  5.   

    我以前写的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