Multiserver (TCP)

    • VB.NET

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

      Kann eig nicht sein. Wenn du den String auf 'Leere' geprüft hast, nachdem alle Leerzeichen removed wurden, dann sind die Nachrichten nicht leer.
      Setzt mal nen Haltepunkt in der Send-Methode und überprüfe mal.
      »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
      Oke danke das du mich nochmal per Haltepunkt alles überprüfen lassen hast was wie wo und wann passiert.

      Ergebnis: Jetzt funktioniert es. Zwar auf eine unschöne Art aber immerhin. Für einen 4 Personen-Chat reicht es ;)

      Lösung:

      VB.NET-Quellcode

      1. Private Sub ListenToConnection(ByVal con As Connection)
      2. Do
      3. Try
      4. Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
      5. If String.IsNullOrEmpty(tmp) Then
      6. list.Remove(con)
      7. SendToAllClients(con.nick & "<-- Hat den Chat verlassen!")
      8. Console.WriteLine(con.nick & " has exit.")
      9. Exit Do
      10. Else
      11. Console.WriteLine(con.nick & ": " & tmp)
      12. SendToAllClients(con.nick & ": " & tmp) ' an alle clients weitersenden.
      13. End If
      14. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
      15. list.Remove(con)
      16. SendToAllClients(con.nick & "<-- Hat den Chat verlassen!")
      17. Console.WriteLine(con.nick & " has exit.")
      18. Exit Do
      19. End Try
      20. Loop
      21. End Sub


      Mfg.
      Nevs08
      @ Nevs08
      Ansonsten "kläre" es mit dem Server direkt. Damit meine ich, dass du (beim Schließen) einen Text (in meinem fall der String "saveme" (auf jedenfall etwas was man nicht so oft/garnicht eingibt. Es könnte auch eine wirre Zeichen folge sein. Z.B. "924thjtfi9f3GTHGg4".)) zum Server schickst, und der Server diesen String erkennt und dich disconnectet. War in meinem fall die einfachste lösung ;P :thumbsup:
      Bellum et Pax.
      Omne initium est difficile.
      -KenJy ;D

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

      Ja Moinsens hier ist KenJy nochmal...


      Wir benutzen in der Schule einen Proxy Server... durch den komme ich mit HTTP und TCP nicht durch. Habe nun aber endlich eine möglichkeit gefunden immerhin mit HTTP durch zu kommen und die Externe IP zu ermitteln.

      VB.NET-Quellcode

      1. Private Function getRSSData(Optional ByVal ProxyAddress As String = "SCHULPROXTIP", Optional ByVal ProxyPort As Integer = 8080, Optional ByVal UserName As String = "BENUTZERNAME", Optional ByVal PassWord As String = "PASS", Optional ByVal Domain As String = "SCHULDOMAIN") As String
      2. Dim WC As New WebClient
      3. Dim newUri As New Uri("www.DieSeitevoneinerEXTERNENIPerkennungsSeite.is")
      4. Dim req As HttpWebRequest
      5. Dim res As HttpWebResponse = Nothing
      6. Dim reader As StreamReader = Nothing
      7. Try
      8. req = WebRequest.Create(newUri)
      9. Dim oProxy As New WebProxy(ProxyAddress, ProxyPort)
      10. oProxy.Credentials = New NetworkCredential(UserName, PassWord)
      11. req.Proxy = oProxy
      12. WC.Proxy = oProxy
      13. Catch
      14. End Try
      15. End Function


      Über HTTP komme ich jetzt ins Internet und bin erfolgreich aus "nur" dem Netzwerk raus (Kann also ins Internet). Ich habe den Clienten (von diesem MultiTCP Server hier) ja aber mit dem TCPClient am laufen. Un ich finde nirgens eine eine Möglichkeit den Proxy für den TCPClienten einzustellen...

      Desshalb bitte ich euch um Hilfe und hoffe dass ich daraus schlau werde ^^


      LG
      Bellum et Pax.
      Omne initium est difficile.
      -KenJy ;D
      Ich würde mich immernoch über eine Lösung über mein Problem erfreuen... auch wenn ihr keine Ahnung habt (weil ihr es evtl. selber nicht wisst) Vermutungen wie ich das machen könnte....

      Danke.
      Bellum et Pax.
      Omne initium est difficile.
      -KenJy ;D

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

      Wie kann ich den Chatverlauf Loggen???

      Ich bin schon verschiedene Tutorials durchgegangen zum Thema in Datei schreiben, aber entweder

      - war der Code veraltet
      - nicht für Konsolenanwendungen (Warum auch immer)
      oder hat einfach nicht funktioniert.

      Es soll ganz einfach sein, und er soll nur an der Stelle mit SendToAllClients(...) das selbe noch mal in eine Datei schreiben.

      Danke im Voraus.
      @RushDen @xd-franky-5 Danke aber der Chat an sich bleibt wie er ist, da ich schon haufenweise Funktionen hinzugefügt habe (Admin/Mitglied, Formatierungen, Commands usw.)

      Edit: @RushDen Wie kann ich dann neuen Text anfügen?? So schreibt er die Datei ja jedes Mal neu.
      In einem windows service macht so ein chat-server mehr sinn.
      Währ nett wenn der TE ein sample für den server auch in service form macht, wenn der TE nicht weis wie, kann ich ihm ja meine version geben, aber ich denke das bekommt er selber hin :)
      Danke
      Wer Rechtschreibfehler findet darf sie behalten :)
      Ich habe hier noch eine neue Idee, warum erstellt man nicht Klassen die dann einfach Serialisiert durch Netzwerk übertragen und dann Deserialisiert werden. So habe ich eine Namepipe erstellt die in der Lage war sehr Performant daten mehrere Daten in einer Pipeline zu übertragen. Weswegen ich dencke dass man Netzwerkprotokole sehr gut durch Serialisierung realisieren kann.

      LG, Herbrich
      Hallo,

      Ist mir schon klar, mein erster TCP-Server hatte auch die Direktive die erste übertragene Zeile als Variable für den Username zu speichern.

      Meine jetzigen TCP-Server übertragen die Daten via JSON (mit den gravierenden vorteil dass HTTP übersprungen wird und ich mein JSON direct über TCP verschicke.)

      Alles in allen ist der Multiserver aber gut gelungen. Er lässt sich sogar so wie er jetzt ist mehr ohder weniger fast c&p in eine Winforms anwendnung übertragen (Threadh sollte natürlich gesetzt sein^°).

      LG, Herbrich
      Ich habe eine Frage. Und zwar möchte ich, wenn Verbindung abbricht, der Client automatisch versucht neu zum Server zu verbinden.
      Alle versuche dies zu lösen schlugen allerdings fehl. Kann Jemand eine Lösung im Bezug auf dieses Problem posten? Wäre sehr nett :)


      Müsste doch mit NetworkStream und der Write(Byte(), Integer, Integer) aus der Basisklasse Stream funzen oder irre ich mich da?
      Und auf Server-Seite mit ReadStream einlesen.
      In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell