基于winsock控件一对一的通信程序倒是不难,但对于一对多,其中要将winsock做成控件数组,始终没有成功郁闷所以请哪位高手帮我做个一对多的程序,或者是给点提示小妹在这多谢了。

解决方案 »

  1.   

    我用WINSOCK写过群聊的东东,不过没有做成数组,如果你需要可以发给你参考一下
    [email protected]
      

  2.   

    做成控件数组没成功么?还是其它问题?
    控件数组:
    可以拖一个控件,然后选择它,然后Ctrl+C复制,然后再粘贴,系统就会回是否该控件已经存在,是否创建控件数组?选择是。然后就创建成功了。
      

  3.   

    对于VB的WinSock偶没用过,不过可以到群11141442找我,不过麻烦说明身份及加入理由,谢谢。
      

  4.   

    MultiLink的WinSock Server程式1.一个WinSock 控制项(当Server)只能连结一个Client端的需求,所以Server要变成可多重
        连结,要有多个WinSock控制项,我们也可以使用Load 指令来动态产生
    2.Server端必须设定好一个Local Port 当作其Listen的Port,所有Client端的RemotePort要
       指定Server 当Listen的Port Number,以本例来说,我设定3128当作Server Listen的
       Port,而我的程式中有一个WinSock Control (Winsock1(0))专门做Listen的动作。在本
       例中,我只允许有4个Cllient同时连上来,所以我在Form Load时,便动态产生4个
       WinSock ,含Listen  的那一个一共5个WinSock Control。
    3.在Server端,如果ConnectionRequest Event产生了,代表有Client端提出需求,这时
       候,我们要选取一个没有使用的WinSock Control来和Client连。
    4.我们在Client中,设定LocalPort = 0 代表会选取一个空着的Port来和Server的Port来连
      在Server中   Winsock1(i).Accept requestID 便会自动为我们做这件事;这时,我们会看
      到Server端的会Assign一个RemotePort,而Client也会Assign一个LocalPort,这次的连
      线便是透过这组连线管道来做该程式请将Client的程式做成.Exe再来重覆行,且Server的程式同时也要执行,当Client
    端的Text1.Text = "Close" 来送给Server时,告知Server该Connection 可结束
    其他相关的知识请查Help或其他书注: GetData方法 的第一个叁数 :如果传回的资料是String则宣告成String,若告成Variant
       在VB环境下没问题,但变成.exe後会有错(Automation Error);当然,若传的是Binary
       的资料,那就使用ByteArray来做
    '以下是Server端程式,需一个ListBox,一个WinSock控制项
    Option ExplicitPrivate Sub Form_Load()
    Load Winsock1(1)
    Load Winsock1(2)
    Load Winsock1(3)
    Load Winsock1(4)Winsock1(0).LocalPort = 3128  '设定Listen的Port是3128,请自行改成您的电脑没冲突的号码
    Winsock1(0).Listen
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Dim i As Long
    For i = 0 To 4
       Winsock1(i).Close
    Next
    Unload Winsock1(1)
    Unload Winsock1(2)
    Unload Winsock1(3)
    Unload Winsock1(4)
    End SubPrivate Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    Dim i As Long
    For i = 1 To 4
       If Winsock1(i).State = sckClosed Then
          Winsock1(i).Accept requestID
          List1.AddItem "Local Port=" + Str(Winsock1(i).LocalPort) + " RemotePort = " + Str(Winsock1(i).RemotePort)
          Exit For
       End If
    Next
    End SubPrivate Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    'Dim mydata As Variant
    Dim mydata As String '注:如果传回的资料是String则宣告成String,若告成Variant
                                          '在VB环境下没问题,但变成.exe後会有错(Automation Error)
    Winsock1(Index).GetData mydata, vbString
    List1.AddItem "From Socket" + Str(Index) + "  " + mydata
    Winsock1(Index).SendData "WinSock" + Str(Index) + "Reply"
    If mydata = "Close" Then
       Winsock1(Index).Close
    End If
    End Sub '以下是Client端程式,需一个ListBox,一个WinSock控制项,三个Command Button
    '与一个TextBox用来传资料,
    Option ExplicitPrivate Sub Command1_Click()
    Winsock1.LocalPort = 0 '以便自动产生Local Port
    Winsock1.Connect  "140.116.253.247" '设定改成您 Server 电脑的IP 号码
    End SubPrivate Sub Command2_Click()
    Winsock1.SendData  "Close"  '通知Server端Close
    DoEvents
    Winsock1.Close
    End SubPrivate Sub Command3_Click()
    Winsock1.SendData Text1.Text
    End SubPrivate Sub Form_Load()
    Winsock1.RemotePort = 3128  '设定与Server端做Listen的Port相同
    Command1.Caption = "Connect"
    Command2.Caption = "Close"
    Command3.Caption = "Send"
    List1.Clear
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    If Winsock1.State <> sckClosed Then
       Winsock1.SendData  "Close"
       DoEvents
       Winsock1.Close
       Winsock1.LocalPort = 0
    End SubPrivate Sub Winsock1_Connect()
    If Winsock1.State = sckConnected Then
       List1.AddItem "Connected! LocalPort =" + Str(Winsock1.LocalPort) + " RemptePort = " + Str(Winsock1.RemotePort)
    End IfEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim mydata As String
    Winsock1.GetData mydata, vbString
    List1.AddItem mydata
    End SubPrivate Sub Winsock1_Error(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)
    List1.AddItem Description
    End Sub