mehrere verbindungen mit Winsock

Dieses Thema mehrere verbindungen mit Winsock im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von killer-Trekkie, 20. Nov. 2003.

Thema: mehrere verbindungen mit Winsock Servus, Wie kann ich mit Winsock-Serverprogramm zu mehreren Clients eine Verbindung aufbauen um z.B. Sachen zu...

  1. Servus,

    Wie kann ich mit Winsock-Serverprogramm zu mehreren Clients eine Verbindung aufbauen um z.B. Sachen zu senden (nicht als Chatprogramm oder Nachrichtensender)? Geht das überhaupt über TCP oder muss es über UDP gehen (hab es schon über UDP hinbekommen, konnte aber z.B. Nachrichten nicht an ALLE senden)?

    Vielen Dank für eure Hilfe.
     
  2. Server definiert sich übrigens so, das ein Server auf Verbindungsanfragen wartet und ein Client ist der Rechner der eine Verbindung zu einem Server aufbauen soll.

    Dein Server (eigendlich Client) baut ein Kontakt zu einem Client (eigendlich Server) auf. Damit ist diese Instanz des Ws- OCX belegt. Du kannst aber im Programmcode des Clients (eigendlich Server) ja eine neue Instanz erstellen; in dem Ereigniss ws_connect (Load Winsock1(iVerbindungsanzahl).

    Broadcastmeldungen gehen scheinbar nicht.
     
  3. Code:
    Private Sub Winsock_Connect()
        load Winsock(4)
    End Sub
    
    So? Oder muss man noch was deklarieren?

    mfg

    killer-Trekkie
     
  4. 1. Ziehe ein ws- ocx auf das Formular.
    2. Markiere dies.
    3. Drücke strg+V und strg+C
    4. Es erscheint eine Meldung (wollen Sie ein Steuerelementefeld erstellen). Dies mit ja beantworten.
    5. Das neu erstellte Winsock- ocx wieder löschen.

    EDIT: Ein Steuerelementefeld lässt sich auch einfacher erstellen indem man die Eigenschaft Index des vorhandenen Steuerelementes auf 0 setzt.


    Nun bekommt das Ereignis beim Aufruf als Parameter den Index übergeben.
    Code:
    Private Sub Winsock_Connect(index as integer)
    Mit
    Code:
    load winsock(4)
    klappts auch nicht

    Code:
    Dim iVerb as integer
    
    Private Sub Winsock_Connect(index as integer)
         iVerb=iVerb+1
        load Winsock(iVerb)
    End Sub
    
    Private sub Winsock_close(index as integer)
         iVerb=iVerb-1
         unload winsock(index)
    end sub
    
     
  5. Geht nicht!!!!

    Eine Verbindung wird aufgebaut, aber bei der zweiten kommt ein Error (err.Number=0; err.Description kommt keine).
    Ich benutze TCP. Kann es vielleciht an Winsock.listen liegen?

    Der Server:
    Code:
    Option Explicit
        Private iVerb As Integer
    
    Private Sub Form_Load()
        Winsock(iVerb).Listen
    End Sub
    
    Private Sub Winsock_Close(Index As Integer)
        Winsock(iVerb).Close
    
        Do
            DoEvents
        Loop Until Winsock(iVerb).State = sckClosed
    
        Winsock(iVerb).Listen
    
        Label1 = Warte auf eine Verbindung
    End Sub
    
    Private Sub Winsock_Connect(Index As Integer)
        iVerb = iVerb + 1
        Load Winsock(iVerb)
    End Sub
    
    Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        If Winsock(iVerb).State <> sckClosed Then Winsock(iVerb).Close
        Winsock(iVerb).Accept requestID
    
        Label1 = Eine Verbindung wurde hergestellt
    
        List1.AddItem requestID
    End Sub
    
    Der Client
    Code:
    Private Sub Command1_Click()
        Winsock.RemoteHost = 192.168.0.1
        Winsock.RemotePort = 6687
        Winsock.Connect
    
        Do
            DoEvents
            If Winsock.State = sckError Then
                MsgBox Err.Number &   & Err.Description
            End If
        Loop Until Winsock.State = sckConnected Or Winsock.State = sckError
    
        If Winsock.State = sckConnected Then
            Label1 = Connected
        Else
            Label1 = Error
        End If
    End Sub
    
    Private Sub Command2_Click()
        Winsock.Close
    
        Do
            DoEvents
        Loop Until Winsock.State = sckClosed
        Label1 = Closed
    End Sub
    
    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
        Dim Nachricht As String
        Winsock.GetData Nachricht
    
        Label2 = Nachricht
    End Sub
    
    Wo ist der Fehler??????
     
  6. Habs nochmal leicht abegeändert, so sollte es klappen. Zur Fehlerbehandlung hat das Winsock- ocx übrigens ein eigenes Error- Ereigniss.


    Code:
    'Server
    Option Explicit
        Private iVerb As Integer
    
    Private Sub Form_Load()
        Winsock(iVerb).Listen
    End Sub
    
    Private Sub Winsock_Close(Index As Integer)
        Winsock(iVerb).Close
    
        Do
            DoEvents
        Loop Until Winsock(iVerb).State = sckClosed
    
        Winsock(iVerb).Listen
    
        Label1 = Warte auf eine Verbindung
    End Sub
    
    Private Sub Winsock_Connect(Index As Integer)
       ->iVerb = iVerb + 1
       ->Load Winsock(iVerb)
       ->Winsock(iVerb).LocalPort = 0
    End Sub
    
    Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        iVerb = iVerb + 1
        Load Winsock(iVerb)
        Winsock(iVerb).LocalPort = 0
        
        
        If Winsock(iVerb).State <> sckClosed Then Winsock(iVerb).Close
        Winsock(iVerb).Accept requestID
    
        Label1 = Eine Verbindung wurde hergestellt
    
        List1.AddItem requestID
    End Sub
    
    Code:
    'Client
    
    
    Private Sub Command1_Click()
        Winsock.RemoteHost = 192.168.0.100
        Winsock.RemotePort = 6687
        Winsock.Connect
    
        Do
            DoEvents
            If Winsock.State = sckError Then
                MsgBox Err.Number &   & Err.Description
            End If
        Loop Until Winsock.State = sckConnected Or Winsock.State = sckError
    
        If Winsock.State = sckConnected Then
            Label1 = Connected
        Else
            Label1 = Error
        End If
    End Sub
    
    Private Sub Command2_Click()
        Winsock.Close
    
        Do
            DoEvents
        Loop Until Winsock.State = sckClosed
        Label1 = Closed
    End Sub
    
    Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
        Dim Nachricht As String
        Winsock.GetData Nachricht
    
        Label2 = Nachricht
    End Sub
    
    Private Sub Winsock_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)
    MsgBox (Description)
    End Sub
    
     
  7. Eine Verbindung wird aufgebaut und Akzeptiert, aber wenn ich versuche von einem dritten rechner eine zweite Verbindung zum Serverprogramm herzustellen kommt eine Fehlermeldung in der Steht, dass die Herstellung einer Verbindung absichtlich verhindert wird. Wie kann ich das umgehen?

    mfg

    killer-Trekkie
     
  8. Das funktioniert. Habs selber getestet. Die Codezeilen im Ereigniss Winsock_Connect sind auskommentiert und im Ereignis Winsock_ConnectionRequest untergebracht.
     
  9. Coll, jetzt gehts, aber um auf meine ursrüngliche Frage zuruckzukommen: Wie kann ich jetzt eine Nachricht an alle Clients senden (an einen geht)?

    mfg

    killer-Trekkie
     
  10. Wie wäre es denn mit ner' Schleife???

    For i = 1 to iVerb
    winsock(i).SendData strData
    next i
     
Die Seite wird geladen...

mehrere verbindungen mit Winsock - Ähnliche Themen

Forum Datum
mehrere internetverbindungen verwalten Software: Empfehlungen, Gesuche & Problemlösungen 11. Aug. 2005
Mehrere Remote Verbindungen auf einem PC gleichzeitig Windows XP Forum 5. Aug. 2005
Mehrere VPN-Verbindungen parallel betreiben Sonstiges rund ums Internet 22. Juli 2005
Mehrere Netzwerkverbindungen Windows XP Forum 27. Juni 2005
Mehrere Details im Windows Explorer gleichzeitig ändern Windows 7 Forum 1. Nov. 2016