1个S端2个C端
S端1个list,1个text
C端1个list,1个text,2个command
需求:
   list同步text内容,当某一个C端断开连接list内就清除断开的C端的text信息,就是list数据同步,由于初次使用winsock,请高手帮忙啊。
=======S端目前已写代码=======================
Dim Ser(500, 2) As String
Private Sub Form_Load()
List1.AddItem Text1.Text
If Winsock(0).State <> sckClosed Then Winsock(0).Close
Winsock(0).Listen
Me.Caption = "等待联机"
End SubPrivate Sub Winsock_Close(Index As Integer)
On Error GoTo acd
  Me.Caption = "客户端:" & Winsock(Index).RemoteHostIP & "已经关闭连接"
  '这里不知道怎么写断开后删除list里C端的信息。
  Ser(Index, 0) = ""
  Unload Winsock(Index)
  Exit Sub
acd:
End SubPrivate Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Integer, pi As Integer
  Dim bi As Boolean
  If Index = 0 Then
       For i = 1 To 30
         If Ser(i, 0) = "" Then
                    pi = i
                    bi = True
       Exit For
         End If
          Next i
            
          If bi = True Then
                  Ser(pi, 0) = Winsock(0).RemoteHostIP
                  Load Winsock(pi)
                  Winsock(pi).LocalPort = 10000 + pi
                  Winsock(pi).Accept requestID
                  Me.Caption = "已有客户端连接"
                  'List1.AddItem '客户机上的text 不知道怎么写
                    'Winsock(i).SendData 发送服务端的list数据,不知道怎么写
          Else
         
                  Me.Caption = "客户端连接已满"
          End If
  End If
End Sub
============================================
C端代码还没写,高手帮忙啊整个过程就是S端和C端的list同步C端的连接和断开信息。。在线等啊,各位老大,5.1快乐。

解决方案 »

  1.   

    我试了一下午,没试出来,才SOS的
      

  2.   

    使用两个List控件,一个可见,用于显示客户端传过来的数据;一个不可见,用于保存客户端数据抵达时的IP。
    当客户端关闭时,遍历第二个list,删除掉与客户端IP相同的item,同时,根据这个list的Index,删除第一个List的Item就可以了。
      

  3.   

    Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        Dim i As Integer, pi As Integer
        Dim bi As Boolean
        If Index = 0 Then
            For i = 1 To 30
                If Ser(i, 0) = "" Then
                    pi = i
                    bi = True
                    Exit For
                End If
            Next i
            If bi = True Then
                Ser(pi, 0) = Winsock(0).RemoteHostIP
                List1.AddItem Ser(pi, 0)
                Load Winsock(pi)
                Winsock(pi).LocalPort = 10000 + pi
                Winsock(pi).Accept requestID
                Me.Caption = "已有客户端连接"
                For i = 0 To List1.ListCount
                    Dim strSend As String
                    strSend = List1.List(i)
                    Winsock(pi).SendData strSend '发送服务端的list数据,不知道怎么写
                Next i
            Else
                Me.Caption = "客户端连接已满"
            End If
        End If
      

  4.   

    从http://download.csdn.net/source/1262347下载源代码.
      

  5.   

    http://download.csdn.net/source/1262347
      

  6.   

    LZ的要求:  list同步text内容,当某一个C端断开连接list内就清除断开的C端的text信息,就是list数据同步.
    请问是清除List内(S端?C端?断开的C端的text信息.
    以下S端代码,在各自C端断开时清除C端在S端的List内的连接记录:
    Private Sub Winsock_Close(Index As Integer)
        On Error GoTo acd
        Me.Caption = "客户端:" & Winsock(Index).RemoteHostIP & "已经关闭连接"
        '这里不知道怎么写断开后删除list里C端的信息。
        Ser(Index, 0) = ""
        Unload Winsock(Index)
        List1.RemoveItem Index - 1 ' 每隔一项
        Exit Sub
    acd:
    End SubPrivate Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        Dim bi As Boolean
        If Index = 0 Then
            For i = 1 To 30
                If Ser(i, 0) = "" Then
                    pi = i
                    bi = True
                    Exit For
                End If
            Next i
            If bi = True Then
                Ser(pi, 0) = Winsock(0).RemoteHostIP
                List1.AddItem pi & "-" & Ser(pi, 0)
                Load Winsock(pi)
                Winsock(pi).LocalPort = 10000 + pi
                Winsock(pi).Accept requestID
                Me.Caption = "已有客户端连接"
                For i = 0 To List1.ListCount
                    Dim strSend As String
                    strSend = List1.List(i)
                    Winsock(pi).SendData strSend '发送服务端的list数据,不知道怎么写
                Next i
            Else
                Me.Caption = "客户端连接已满"
            End If
        End If
    End Sub由于C端断开连接,由S端控制C端是无法实现的.则应由C端的断开连接时通过代码清除在C端本身的List内内容.
      

  7.   

    行 35: 控件 tcpclient 的类 MSWinsockLib.Winsock 不是一个已加载的控件类。
    行 38: 属性名 _ExtentX 在 tcpclient 中是无效的。
    行 39: 属性名 _ExtentY 在 tcpclient 中是无效的。
    行 40: 属性名 _Version 在 tcpclient 中是无效的。
    这事怎么样回事