问题1:winsock用TCP,多客户端连接后,winsock数组会一直累加(即使客户端全退出了,winsock数组还是保持原来的最大客户连接数组),有没办法把数组变回为0 (0是默认开始数)?问题2:winsock用UPD,模式也是客户端对服务端,首先是客户端主动连上服务端(并且会有很多客户端连接),当服务端读数据库有记录会便会向客户端发送数据,因不像TCP那样每个客户有唯一标识的连接状态,那么我如何区别我该给那个客户端发信息呢(我想会出现IP相同的客户端出现吧,有个简单例子最好,3Q)?

解决方案 »

  1.   

    第一个问题,用unload object卸掉已经closed的连接,并且建立一个链表,作为空闲对象编号的指针;再分配时,先检索链表是否有空余编号,如果没有就从最大编号增加,如果有就以链表编号进行增加。
    第二个问题,UDP不像TCP那样对点通信,而是广播式通信,因此没有唯一标识;用UDP只能通过采用自建用户ID进行登录,在发送消息时在消息内标识发给谁,还要在客户端进行处理,将不是自己的消息丢弃……
      

  2.   

    第一个问题我也遇到过,前面load了winsock(i),后面记得要Unload第二个问题,前面你用了TCP进行连接了,那么你服务端中肯定有自己的一个用户列表吧?要不你怎么管理服务端的连接呢?那么TCP是有唯一标识的,你TCP的标识来进行发送不就可以了?何必要用UDP呢?
      

  3.   


    Private Sub Loc_Click()
    Winsock1.SendData Text1.Text
    End SubPrivate Sub Form_Load()
    Winsock1.Protocol = sckUDPProtocol
    Winsock1.LocalPort = "10001"              
    Winsock1.RemoteHost = "127.0.0.1"
    Winsock1.RemotePort = "10000"           
    Winsock1.Bind
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim str As String
    Winsock1.GetData str, vbString
    Text2.Text = str
    End Sub
    上面是单个连接的,多个连接的还没有试过,,你如果试过有OK的。。发下给我哈。。