Konsolen Anwendung... Save and Send and load

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Konsolen Anwendung... Save and Send and load

    Guten abend zusammen...

    ich habe mir einen Server zurecht gemacht... der per TCP Läuft...
    nun möchte ich das Die Konsolenanwendung Im Bestimmten zeitraum Text Speichert
    Beim beitritt eines Clienten den Davor gesendeten Text Sendet [Den text sendet wo der User nicht online war] <-Bsp

    Mein vorhaben:
    User 1 schreibt ne nachricht
    geht wieder offline
    User 2 Tritt den chat bei und erhält die davor gesendete nachricht...

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Imports System.Net
    4. ' TCP-MultiServer
    5. ' C 2009 - Vincent Casser
    6. Module Module1
    7. Private server As TcpListener
    8. Private client As New TcpClient
    9. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
    10. Private list As New List(Of Connection)
    11. Private Structure Connection
    12. Dim stream As NetworkStream
    13. Dim streamw As StreamWriter
    14. Dim streamr As StreamReader
    15. Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
    16. End Structure
    17. Private Sub SendToAllClients(ByVal s As String)
    18. For Each c As Connection In list ' an alle clients weitersenden.
    19. Try
    20. c.streamw.WriteLine(s)
    21. c.streamw.Flush()
    22. Catch
    23. End Try
    24. Next
    25. End Sub
    26. Sub Main()
    27. Console.WriteLine(":: SERVER GESTARTET ::")
    28. server = New TcpListener(ipendpoint)
    29. server.Start()
    30. While True ' wir warten auf eine neue verbindung...
    31. client = server.AcceptTcpClient
    32. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
    33. c.stream = client.GetStream
    34. c.streamr = New StreamReader(c.stream)
    35. c.streamw = New StreamWriter(c.stream)
    36. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
    37. list.Add(c) ' und fügen sie der liste der clients hinzu.
    38. Console.WriteLine(c.nick & "-> Hat den server betreten!.")
    39. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
    40. Dim t As New Threading.Thread(AddressOf ListenToConnection)
    41. t.Start(c)
    42. 'test
    43. 'TEST ENDE
    44. End While
    45. End Sub
    46. Private Sub ListenToConnection(ByVal con As Connection)
    47. Do
    48. Try
    49. Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
    50. Console.WriteLine(con.nick & ":> " & tmp)
    51. SendToAllClients(con.nick & ":> " & tmp) ' an alle clients weitersenden.
    52. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
    53. list.Remove(con)
    54. Console.WriteLine(con.nick & " -> Hat den Server verlassen!.")
    55. Exit Do
    56. End Try
    57. Loop
    58. End Sub
    59. End Module

    Wenn mir jemand helfen könnte wäre ich sehr dankbar :D [Habe im internet nichts nützliches gefunden]
    Danke im vorraus :thumbup:

    Also das ist ja 1 zu 1 der Multiserver aus dem Tutorialbereich aus diesem Forum von 2009. Unabhängig davon, dass es bessere Ansätze für Chatserver gibt als diesen, sehe ich keinen Versuch von dir irgendwas von dem was du möchtest umzusetzen.
    Das ist meine Signatur und sie wird wunderbar sein!

    xX-Nick-Xx schrieb:

    Konsolenanwendung Im Bestimmten zeitraum
    Das passt nicht zusammen.
    Eine Consoleanwendung ist nicht dafür ausgelegt, auf Zeitpunkte oder -intervalle zu reagieren.
    Nimm eine WinForms-Anwendung dafür.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mono schrieb:

    Argumente
    Eine Console führt Main aus und endet unmittelbar danach.
    Du musst "mit Gewalt" eine Message Loop nacherfinden, um ein Verweilen der Console ohne Input auf dem Bildschirm zu erzwingen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!