VB.NET - TCP Server & Client - mehrere Anfragen

  • VB

  • fox(fux)
  • 2635 Aufrufe 2 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • VB.NET - TCP Server & Client - mehrere Anfragen

    Hallo Leute,
    ich habe 2 Programme geschrieben:
    Einmal einen Client und dann noch einen Server.
    Diese 2 kommunizieren via TCP.
    Wenn man den Server startet, lauscht dieser auf Port 60000(TCP) auf einen Clienten. Wenn jetzt ein Kollege von mir den Clienten startet, dann verbindet sich dieser mit dem Server bei mir und sendet 2, 3 Zeilen Text die ich benötige.
    Aber wie kann ich es machen, dass wenn sich 2 Clienten gleichzeitig zu meinem Server verbinden, der Server zuerst den ersten Client verarbeitet und dann auf den zweiten geht...

    Gibt es hierzu eine Lösung?

    Hier der Code:

    Quellcode

    1. Dim bytes(1024) As Byte
    2. Dim countBytesFromClient As Int32
    3. Dim server As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
    4. Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
    5. Dim ipAdress As IPAddress = ipHostInfo.AddressList(0)
    6. Dim localEP As New IPEndPoint(ipAdress, 60000)
    7. server.Bind(localEP)
    8. Try
    9. restart:
    10. Console.Clear()
    11. server.Listen(1)
    12. Console.WriteLine("Waiting for data at port 60000(TCP)...")
    13. clientSocket = server.Accept()
    14. Console.Clear()
    15. Console.WriteLine("Waiting for data at port 60000(TCP)...")
    16. Console.WriteLine("Connection established!")
    17. countBytesFromClient = clientSocket.Receive(bytes)
    18. inv_Name = (Encoding.ASCII.GetString(bytes, 0, countBytesFromClient))[COLOR='SeaGreen'] 'erste Data welche ich benötige[/COLOR]
    19. Dim answer1() As Byte = Encoding.ASCII.GetBytes("Name_erhalten")
    20. clientSocket.Send(answer1)
    21. countBytesFromClient = clientSocket.Receive(bytes)
    22. Nachricht = (Encoding.ASCII.GetString(bytes, 0, countBytesFromClient))
    23. Dim answer2() As Byte = Encoding.ASCII.GetBytes("Nachricht_erhalten") [COLOR='SeaGreen']'zweite Data welche ich benötöige.[/COLOR]
    24. clientSocket.Send(answer2)
    25. Console.Write("Message from: ")
    26. Console.ForegroundColor = ConsoleColor.White
    27. Console.WriteLine(inv_Name)
    28. Console.ForegroundColor = ConsoleColor.Gray
    29. Console.Write("Message: ")
    30. Console.ForegroundColor = ConsoleColor.White
    31. Console.WriteLine(Nachricht)
    32. Console.ForegroundColor = ConsoleColor.Gray
    33. clientSocket.Close()
    34. GoTo restart [COLOR='SeaGreen'] 'wenn ich dann wieder oben auf restart bin, kann problemlos ein weiterer Client verbinden![/COLOR]
    35. Catch ex As Exception
    36. 'Fehlerbehandlung
    37. End Try
    Alles anzeigen


    Wie kann ich das Problem mit den 2 Clienten gleichzeitig lösen?
    Aber bitte lasst mich nicht den kompletten Code neuschreiben. ^^
    Achja: Das ist meine erste TCP Anwendung, die ich soweit ohne Forenhilfe aufgestellt habe. (Hilfe war ein PDF von Galileo Computing)
    Habe im Code alles "Nicht Wichtige" der Übersicht zuliebe herausgelöscht...

    Danke für euer Bemühen!
    mfg fox(fux)
  • server.Listen(1)

    Der Parameter "1" beschreibt die Größe der warteschlange die der Server anlegt wenn mehrere Clients eine Verbindung aufbauen. Bei dir ist die auf 1 gesetzt, d.h. du erlaubst nur eine Verbindung, die anderen werden nicht in die Warteschlange gesetzt.

    Theoretisch sollte es ausreichen den Parameter zu erhöhen, damit beide clients verarbeitet werden.
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • Danke, danke....
    Aber wann werden diese verarbeitet?
    Nach welcher Zeile?
    Nach "clientSocket.Close()"??

    DANKE fox(fux)

    Ich bekomme manchmal beim Server eine Fehlermeldung:
    "System.Net.Sockets.SocketException: Eine vorhandene Verbindung wurde vom Remotehost geschlossen _ bei System.Net.Sockets.Socket.Receive(Byte[] buffer) _ bei inviteServer.Module1.Main()"

    Was bedeutet das?

    mfg

    Hier kann auch zu --- closed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: Doppelpost => Regeln lesen!