Message Box mit TCP Nachricht

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von vb2011.

    Message Box mit TCP Nachricht

    Hi Leute,

    ich habe ein kleines Problem, wo ich mir sicher bin das Ihr
    mir da bestimmt helfen könnt.

    Und zwar war ich auf der Suche nach einem TCP Server Client
    Model das jetzt auch fast fertig ist.

    Es sollten wie gesagt von der Client Anwendung Nachrichten
    an den Server geschickt werden die dann per Messagebox ausgeben werden.

    Die Server Anwendung sollte wie gesagt ein Konsolen Fenster
    sein, da habe ich dann ein Modul gewählt, nun wird bei dem Empfang einer TCP
    Nachricht eine Messagebox ( Form1) ausgeben mit dem Text vom Client. Das
    Problem ist nun das wenn die Message box ausgeben wird sollte diese auch
    bestätigt werden mit einem Klick auf ok. Jetzt das Problem Was nun zu Schwierigkeiten führt wenn die
    Messagebox nicht geschlossen wird und eine weitere Nachricht eingeht SOLL JA AUCH EINE zweite Form 1 aufpoppen stattdessen stürzt das Programm ab da der Code irgendwie
    nicht zuende ausgeführt wurde.

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

    VB.NET-Quellcode

    1. While True
    2. client = server.AcceptTcpClient
    3. Dim c As New Connection
    4. Dim app as new Form1
    5. c.stream = client.GetStream
    6. c.streamr = New StreamReader(c.stream)
    7. 'c.streamw = New StreamWriter(c.stream)
    8. c.nick = c.streamr.ReadLine
    9. My.Computer.Audio.Play(wav, AudioPlayMode.Background)
    10. app.Label1.Text = c.nick
    11. app.ShowDialog()
    12. Dim t As New Threading.Thread(AddressOf ListenToConnection)
    13. t.Start(c)
    14. End While


    in der schleife musst Du bei jeder neuen verbindung eine neue Form1 erzeugen, das machst Du nicht. ich habs Dir oben mal reingeschrieben. entweder Du nimmst ganz oben bei den globalen-variablen die deklaration raus und schreibst es so, wie ich es Dir oben verdeutliche oder Du schreibst oben bei den globalen variablen:

    VB.NET-Quellcode

    1. Dim app as Form1


    ohne new und schreibst in der schleife:

    VB.NET-Quellcode

    1. app = new Form1()


    ich würd aber variante 1 nehmen. teste mal...
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hi, leider löst das nicht mein Problem

    Es wird zwar beim ersten mal die Form1 geöffnet aber wenn man diese nicht schließt und eine zweite Nachricht kommt wird diese gar nicht ausgeben.

    Es sollen ja mehrere Forms ausgeben werden, habe einen ähnlichen Thread gefunden
    [VB 2010] Threads und mehrere Forms
    der hat mich aber bisher auch nicht weiter gebracht.

    Danke für deine Bisherige Hilfe
    ich glaub der aufruf .ShowDialog blockiert Deine anwendung. nimm mal .Show und setz die .TopMost-eigenschaft der form auf true, damit sie im vordergrund erscheint.

    was auch noch ne möglichkeit ist:

    VB.NET-Quellcode

    1. dim f1 as new Form1
    2. 'eigenschaften festlegen
    3. Application.Run(f1)
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

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

    Nein es können immer noch nicht zwei Form 1 geöffnet werden wenn bereits eine Form geöffnet ist und noch nicht geschlossen wurde.

    Fehler
    Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen.
    Für
    c.streamr = New StreamReader(c.stream)

    Danke weiterhin für eure Hife

    ?? Hier mal das Projekt

    Immer noch den gleichen die Fehler Meldung kommt immer wenn
    bereits Form1 aufgerufen ist und der Client eine weitere TCP Nachricht schickt.

    Dann sollte ja eigentlich ein weiteres Form1 mit Text aufpoppen, aber
    stattdessen bekommt man diese Fehlermeldung.

    Also noch einmal



    Client wird aufgerufen -> Sendet Nachricht an Server

    Server empfängt -> Form1 gibt mittels Label die Nachricht aus vom Client

    --

    Form1 wurde nicht geschlossen

    Client sendet weitere NACHRICHT

    Server empfängt -> KANN ABER NICHT eine weitere Form 1 ausgeben

    soll dieser aber



    Problem Absturz des Servers

    im Anhang mal mein Projekt

    es muss im Client nur eure IP eingeben werden

    cmd-> ipconfig

    dann Compiliert und ausführen der Multiserver muss auch gestartet werden



    dann könnt ihr sehen das nur eine Nachricht zu zeit empfangen werden kann bzw.
    in einer Form



    ich glaube ich darf das Ganze nicht im Main threat der Anwendung starten
    sondern als invoke, also soweit hab ich bisher recherchiert bei google.
    DANKE FÜR EURE HILFE

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „vb2011“ () aus folgendem Grund: Anhang

    o/

    guggst Du dateianhang. so sollte es gehen...
    Dateien
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    o/

    in der regel verbinden sich mehere clients zu einem server. dabei hat der sever im idealfall immer die selbe adresse. der server hat alle verbindungsdaten der clients und der server mananged das verteilen der nachrichten. was im umkehrschluss auch bedeutet, dass Deine clients auch auf nachrichten vom server horchen müssen.

    aber so wie ich Dich verstehe, möchtest Du Deinen server verteilen und mit dem client die nachrichten verschicken? dann brauchst Du alle ip-adressen der teilnehmer. alle server-betreiber müssen den entsprechenden port im router an den pc weiterleiten und ggf. den port, bzw. die anwendung in der firewall freigeben. Deine lösung, bzw. Dein ansatz hier ist etwas unüblich und umständlich. besser wäre, 1 server und mehrere clients.

    aber gut, wenn Du es so haben möchtest, dann....

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. 'die ips musst Du iwo speichern, das bleibt Dir überlassen.
    3. Dim ips() As String = {"80.10.224.223", "80.11.24.24", "80.24.26.33"}
    4. For Each ip As String In ips
    5. Try
    6. 'immer einen neuen client erstellen...
    7. client = new TcpClient()
    8. 'hier wird der string in eine gültige ip umgewandelt.
    9. client.Connect(System.Net.IPAddress.Parse(ip), 8004)
    10. If client.Connected Then
    11. stream = client.GetStream
    12. streamw = New StreamWriter(stream)
    13. streamr = New StreamReader(stream)
    14. streamw.WriteLine(nick)
    15. streamw.Flush()
    16. Application.Exit()
    17. Else
    18. End If
    19. Catch ex As Exception
    20. Application.Exit()
    21. End Try
    22. Next
    23. End Sub


    keine schöne lösung. ich schlage Dir vor, das ganze nochmal zu überdenken... :) aber Du kommst bestimmt selbst drauf. meld Dich, wenn Du nicht weiter kommst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o