Multiserver (TCP)

    • VB.NET

    Es gibt 854 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

      Nachricht Manuel über console senden.

      moin :D



      mit diesem code hier kann ich eine nachricht manuel über die console versenden.

      VB.NET-Quellcode

      1. Sub sendmanual()
      2. For Each Connection In list
      3. Dim name As String
      4. Dim nachricht As String
      5. Console.WriteLine("Name Eingeben")
      6. name = Console.ReadLine()
      7. Console.WriteLine("nachricht Eingeben")
      8. nachricht = "Admin: " & Console.ReadLine
      9. Sendtoperson(nachricht, name)
      10. Next
      11. End Sub

      meine frage jetzt ist: wo kann ich den code einfügen sodass der rest vom server ohne pause oder so fortgesetzt wird.
      ich weis das ist eine blöde frage aber ich weis wirklich nicht weiter ;(
      Ganz normal einbauen, dann in der Sub Main einen neuen Thread starten, also mit MultiThreading.


      So, meine Frage:
      Wie kann ich die Max.-Anzahl beim Server festlegen? Also das z.B. nur 25 Clienten sich connecten können, und keiner mehr...
      Hab selber die list() optionen gekuckt, und nix gefunden...

      mfg

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gfcwfzkm“ ()

      ich habe das jetzt so (vergeblich) versucht

      VB.NET-Quellcode

      1. Dim b As New Threading.Thread(AddressOf sendmanual)
      2. b.Start()

      und daS habe ich überall in sub MAIN()
      reingemacht.
      leider klappt das nicht.
      gibt es nicht irgendein code,das die console IMMER einen sub ausführt und die anderen subs darunter nicht leiden(ausfallen oä)
      ich würde nähmlich gerne admin befehle IN der console haben.
      also dass man IMMER in die console was reinschreiben kann und das dabei die anderen subs einfach weiterlaufen.

      weis jemand ne lösung ?
      GreeZ
      Poste mal deinen Main() Code..

      Eigentlich sollte es funzen... (bei mir funzt's...)
      so mein Main() code ist vom orginal eigentlich unverändert, nur das ich da eine kleine( sinnlose) spielerrei und pw abfrage reingemacht habe.

      dürfte eigentlich nicht interessant sein aber ich postees trozem mal ;D
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Sub Main()1: Console.WriteLine("Type in Password")
      2. If Console.ReadLine = "lol" ThenConsole.WriteLine("Password Right")
      3. Console.WriteLine("Server Starts Now!")System.Threading.Thread.Sleep(1000)
      4. Console.Clear()Console.WriteLine("______________________________________________________")
      5. Console.WriteLine("________________Server is Starting____________________")Console.WriteLine("______________________________________________________")
      6. Console.WriteLine("______________________0 %_____________________________")Console.WriteLine("______________________________________________________")
      7. System.Threading.Thread.Sleep(500)Console.Clear()
      8. Console.WriteLine("______________________________________________________")Console.WriteLine("________________Server is Starting____________________")
      9. Console.WriteLine("______________________________________________________")Console.WriteLine("______________________10 %____________________________")
      10. Console.WriteLine("______________________________________________________")System.Threading.Thread.Sleep(500)
      11. Console.Clear()Console.WriteLine("______________________________________________________")
      12. Console.WriteLine("________________Server is Starting____________________")Console.WriteLine("______________________________________________________")
      13. Console.WriteLine("______________________20 %____________________________")Console.WriteLine("______________________________________________________")
      14. System.Threading.Thread.Sleep(500)Console.Clear()
      15. Console.WriteLine("______________________________________________________")Console.WriteLine("________________Server is Starting____________________")
      16. Console.WriteLine("______________________________________________________")Console.WriteLine("______________________30 %____________________________")
      17. Console.WriteLine("______________________________________________________")System.Threading.Thread.Sleep(500)
      18. Console.Clear()Console.WriteLine("______________________________________________________")
      19. Console.WriteLine("________________Server is Starting____________________")Console.WriteLine("______________________________________________________")
      20. Console.WriteLine("______________________40 %____________________________")Console.WriteLine("______________________________________________________")
      21. System.Threading.Thread.Sleep(500)Console.Clear()
      22. Console.WriteLine("______________________________________________________")Console.WriteLine("________________Server is Starting____________________")
      23. Console.WriteLine("______________________________________________________")Console.WriteLine("______________________50 %____________________________")
      24. Console.WriteLine("______________________________________________________")System.Threading.Thread.Sleep(500)
      25. Console.Clear()Console.WriteLine("______________________________________________________")
      26. Console.WriteLine("________________Server is Starting____________________")Console.WriteLine("______________________________________________________")
      27. Console.WriteLine("______________________60 %____________________________")Console.WriteLine("______________________________________________________")
      28. System.Threading.Thread.Sleep(500)Console.Clear()
      29. Console.WriteLine("______________________________________________________")Console.WriteLine("________________Server is Starting____________________")
      30. Console.WriteLine("______________________________________________________")Console.WriteLine("______________________70 %____________________________")
      31. Console.WriteLine("______________________________________________________")System.Threading.Thread.Sleep(500)
      32. Console.Clear()Console.WriteLine("______________________________________________________")
      33. Console.WriteLine("________________Server is Starting____________________")Console.WriteLine("______________________________________________________")
      34. Console.WriteLine("______________________80 %____________________________")Console.WriteLine("______________________________________________________")
      35. System.Threading.Thread.Sleep(500)Console.Clear()
      36. Console.WriteLine("______________________________________________________")Console.WriteLine("________________Server is Starting____________________")
      37. Console.WriteLine("______________________________________________________")Console.WriteLine("______________________90 %____________________________")
      38. Console.WriteLine("______________________________________________________")System.Threading.Thread.Sleep(500)
      39. Console.Clear()Console.WriteLine("______________________________________________________")
      40. Console.WriteLine("________________Server is Starting____________________")Console.WriteLine("______________________________________________________")
      41. Console.WriteLine("______________________100 %___________________________")Console.WriteLine("______________________________________________________")
      42. System.Threading.Thread.Sleep(500)Console.Clear()
      43. Else
      44. ' Console.Clear()Console.WriteLine("______________________________________________________")
      45. Console.WriteLine("Wrong Password")GoTo 1
      46.  End If
      47. hier der eigentliche Main() teil der (soweit ich es beurteilen kann) eher mit meinem problem zu tun hat

      VB.NET-Quellcode

      1. Console.WriteLine("╔══════════════════════════════════════════════════════════╗")
      2. Console.WriteLine("║ TeddyGun300 Chat Server by vb-paradise.de [BETA] ║")
      3. Console.WriteLine("╚══════════════════════════════════════════════════════════╝" & vbNewLine)
      4. server = New TcpListener(ipendpoint)
      5. server.Start()
      6. While True ' wir warten auf eine neue verbindung...
      7. Dim b As New Threading.Thread(AddressOf sendmanual)
      8. b.Start()
      9. client = server.AcceptTcpClient
      10. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
      11. c.stream = client.GetStreamc.streamr = New StreamReader(c.stream)
      12. c.streamw = New StreamWriter(c.stream)
      13. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
      14. list.Add(c) ' und fügen sie der liste der clients hinzu.Console.WriteLine(c.nick & " has joined.")
      15. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
      16. Dim t As New Threading.Thread(AddressOf ListenToConnection)
      17. t.Start(c)
      18. End While
      19.  
      20. End Sub


      der code zum aufrufen ist NICHT in dem code drin,da es nicht geklappt hat.
      kannst du mir sagen wo ich das(fals der code überhaupt richtig ist ) einfügen muss ?

      VB.NET-Quellcode

      1. Dim b As New Threading.Thread(AddressOf sendmanual)
      2. b.Start()






      habe mal ein paar der "formfehler" gekillt.

      die fehler im ersten expander einfach ignorieren da dieser eh code (99%sicher) nicht zur fehleranaylse meines problems beiträgt.

      nochmal Greez :D

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „teddygun300“ ()

      Seltsam...

      Sollte eigentlich funzen...

      Ist alles in der (AddressOf ...) richtig?
      Ist die Sub selber richtig?

      Schreib mal bei der Sub sendmanual am anfang: Console.WriteLine("Funktioniert doch...")

      So sieht man eigentlich am besten ob es funzt...


      mfg
      Auch von mir eine herzliches Dankeschön. Der TCP ist genau dass, was ich suchte.

      Leider gibt es bei mir einen Fehler beim starten?

      Client Zeile 52 bei "streamw.WriteLine(TextBox1.Text)" Fehlerhinweis "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." => new verwenden.

      Leider werde ich daraus nicht ganz schlau...

      Könnte ihr mir etwas weiterhelfen?
      hallo,
      erstmals supa, danke

      hat jemand das problem, dass das programm nicht richtig beendet, wenn man den server in einer windows form macht?

      wenn ich auf Pause drücke nach dem beenden der windows form, sehe ich dass er in dieser schleife hängen bleibt, und auf verbindungen wartet:

      VB.NET-Quellcode

      1. While True ' wir warten auf eine neue verbindung...
      2. client = server.AcceptTcpClient ' da bleibt er hängen!!!! obwohl schon client.closed ist .....
      3. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
      4. c.stream = client.GetStream
      5. c.streamr = New StreamReader(c.stream)
      6. c.streamw = New StreamWriter(c.stream)
      7. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
      8. list.Add(c) ' und fügen sie der liste der clients hinzu.
      9. Console.WriteLine(c.nick & " has joined.")
      10. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
      11. Dim t As New Threading.Thread(AddressOf ListenToConnection)
      12. t.Start(c)
      13. End While


      Lg
      CrashWriter
      da ist nichts Fehlerhaft, wurde nur nicht für eine GUI gemacht...

      Für eine GUI musst du einfach das in einen extra Thread packen und als Bedingung für die Schleife eine boolesche Variable, welche du beim beenden einfach auf False setzt...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---

      VB.NET-Quellcode

      1. While True ' wir warten auf eine neue verbindung...
      2. client = server.AcceptTcpClient ' da bleibt er hängen!!!! obwohl schon client.closed ist .....
      Ich sehe keine Ausstiegsmöglichkeit aus dieser Schleife, das tätichschon als fehlerhaft aussehend bezeichnen.
      dann hassu nicht verstanden, denn er bleibt da hängen, wenn der server offen ist, hört aber auf hängen zu bleiben wenn der geschlossen wird, nur die endlosschleife bleibt...
      Und wenn client.closed ist, heißt das ja nicht, dass er keine neuen Clienten holen darf...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jvbsl“ ()

      das versteh ich wirklich nicht: Wie kann man den Server schließen, wenn der Thread in genannter schleife hängt? Tatsächlich hängt der thread ja nicht in der Schleife, sondern in server.AcceptClient(), welches eine den Thread blockierende Funktion ist.

      gibts da noch einen anneren Thread, von wo aus der Server quasi abgeschossen werden kann? (ich hab mich in den Gesamt-Code nicht eingearbeitet)
      Kleine frage...

      Ich möchte gerne die IP des Clienten sehen, wenn der Server die Verbindung annimmt...

      Meine frage: wie mach ich das, damit dies in Console.WriteLine(clientip) gezeigt wird?

      mfg

      gfcwfzkm