一个WINSOCKET控件可同几个客户端进行连接,连接到的客户端,如何获得客户端的IP,HOSTNAME,端口等信息。谢谢大家。还有能否提供一份多人聊天室的源码

解决方案 »

  1.   

    连接数的话看你怎么用法了,如果是udp做群发的话一个控制就可以群发群收了,不过只能在同一局域网里边
    如果tcp下做的话,服务端用掉一个winsock做server 然后建个winsock数组处理客户端的连接,客户端程序只要一个控制就够了。winsock连接上之后,在remoteip里就可以读到IP了,不过主机名好象读不上来,要客户端程序自己来提交了
      

  2.   


    再请教一下,这个winsock数组 通常要建包含多少个WINSOCK的数组呢?
      

  3.   


    再请教一下,这个winsock数组 通常要建包含多少个WINSOCK的数组呢?
    数组是做成动态的,需要的时候就load一个,做个连接计数,自己控制一下连接的数量,我做过的东西都比较小,连接数也都才十几个的,上限有多大我也不清楚。
      

  4.   


    再请教一下,这个winsock数组 通常要建包含多少个WINSOCK的数组呢?
    数组是做成动态的,需要的时候就load一个,做个连接计数,自己控制一下连接的数量,我做过的东西都比较小,连接数也都才十几个的,上限有多大我也不清楚。能否给提供个详细的代码,或代码片段也可
      

  5.   

    在窗体上拉个winsock控件上来,然后把控件Index属性填成 0
    别的代码抄进去就可以了,服务器端:Private Sub Form_Load()
        Winsock1(0).LocalPort = 2013 '指定服务器监听端口
        Winsock1(0).Listen '开始监听
    End SubPrivate Sub Winsock1_Close(Index As Integer)
        Winsock1(Index).Close '对方断开
    End SubPrivate Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        Dim I As Integer
        I = 1
        If Winsock1.UBound > 0 Then
            For I = 1 To Winsock1.UBound
                If Winsock1(I).State = 0 Then Exit For '查找空闲的winsock控件
            Next
        End If
        If I > Winsock1.UBound Then Load Winsock1(I) '没有空闲控件的话创建一个新控件
        Winsock1(I).Accept requestID '应答客户端的请求 连接建立时将触发connect事件,表示连接正式建立
    End SubPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        Dim Data() As Byte'如果只想试试效果的话你可以改成 Dim Data As String '不过用数组接收数据会比字符串好
        Winsock1(Index).GetData Data '接收数据
        '数据通信基本上就在这下边来写代码了
    End SubPrivate Sub Winsock1_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        Winsock1(Index).Close '网络错误
    End Sub
      

  6.   

    客户端的话下边这样写就可以了
     winsock1.connect "远程计算机名或者IP",服务端口 
    发送数据用 winsock1.SendData Data
    接收数据一样是在DataArrive事件里
    同一控件要重复使用的话下一次connect之前要close掉
      

  7.   


    再请教一下,客户端的LOCALPORT是否可以随意设置的,有没有必要和服务器端一致,如果不设置的话,那在与服务器端建立连接后,这个LOCALPORT的值会是多少?
      

  8.   

    客户端的localport可以不设,电脑会随机分配一个,等连接完成时你读一下localport就知道是多少了
      

  9.   

    一个winsock同时只能和一个用户连接,因为其只有一个remote的ip和端口,但是,你可以创建winsock数组,每个单元连接一个用户
      

  10.   


    再请教一下,客户端的LOCALPORT是否可以随意设置的,有没有必要和服务器端一致,如果不设置的话,那在与服务器端建立连接后,这个LOCALPORT的值会是多少?客户端的localport设置可以随意,但是不能是被其它程序占用的端口,以及一些协议使用端口,如80,8080 135等等如果没有设置会默认为0,可能会冲突
      

  11.   


    再请教一下,客户端的LOCALPORT是否可以随意设置的,有没有必要和服务器端一致,如果不设置的话,那在与服务器端建立连接后,这个LOCALPORT的值会是多少?客户端的localport设置可以随意,但是不能是被其它程序占用的端口,以及一些协议使用端口,如80,8080 135等等如果没有设置会默认为0,可能会冲突非常感谢,可否给提供一个类似QQ的完整源代码,哈哈。