TCP Chat

  • VB.NET

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

    Hallo,

    ich weiß das Thema wurde hier schon mehrmals besprochen dennoch habe ich Fragen:

    Ich habe alles aus einem Tut übernommen (youtube.com/watch?v=DMWL1q0_3Yo). Nun bin ich leider nicht wirklich bewandert und habe mir das Ganze wohl etwas zu einfach vorgestellt.
    Im Grund will ich nur wissen, wie kommt es, dass wenn ich eine Nachricht eintippe, diese stets doppelt im Verlauf eingetragen wird und warum (Selbstgespräch :D) und wie ich kann ich dafür sorgen, dass andere (zB. aus dem Netzwerk) mit einsteigen können?
    Bzw. wo muss ich Änderungen vornehmen und wieso bzw. wo bekomme ich die Information dafür her?

    Freue mich über Feedback.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO, System.Threading, System.Net.Sockets
    2. Public Class z_chat
    3. Dim listener As New TcpListener(8000)
    4. Dim client As TcpClient
    5. Dim message As String
    6. Private Sub z_chat_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    7. listener.Stop()
    8. Application.Exit()
    9. End Sub
    10. Private Sub z_chat_Load(sender As Object, e As EventArgs) Handles Me.Load
    11. listener.Start()
    12. Dim listthread As New Thread(New ThreadStart(AddressOf listening))
    13. listthread.Start()
    14. Dim IP As System.Net.IPAddress
    15. IP = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList(0)
    16. tb_ip.Text = IP.ToString
    17. End Sub
    18. Private Sub listening()
    19. listener.Start()
    20. End Sub
    21. Private Sub b_send_Click(sender As Object, e As EventArgs) Handles b_send.Click
    22. Dim nick As String = " " & tb_nick.Text & ": "
    23. If rtb_msg.Text = "" Then
    24. MsgBox("Geben Sie einen Text ein!", MsgBoxStyle.Exclamation, "Text fehlt!")
    25. Else
    26. Try
    27. client = New TcpClient(tb_ip.Text, 8000)
    28. Dim writer As New StreamWriter(client.GetStream())
    29. writer.Write(rtb_msg.Text)
    30. rtb_chat.AppendText(Format(Now, "[hh:mm]") & nick & rtb_msg.Text & vbCrLf)
    31. rtb_msg.Clear()
    32. writer.Flush()
    33. Catch ex As Exception
    34. MsgBox("Fehler!")
    35. End Try
    36. End If
    37. End Sub
    38. Private Sub tmr_1_Tick(sender As Object, e As EventArgs) Handles tmr_1.Tick
    39. If listener.Pending = True Then
    40. message = ""
    41. client = listener.AcceptTcpClient()
    42. Dim reader As New StreamReader(client.GetStream())
    43. While reader.Peek > -1
    44. message = message + Convert.ToChar(reader.Read()).ToString
    45. End While
    46. rtb_chat.AppendText(Format(Now, "[hh:mm]") & " Er/Sie: " & message & vbCrLf)
    47. End If
    48. End Sub
    49. Private Sub rtb_msg_KeyDown(sender As Object, e As KeyEventArgs) Handles rtb_msg.KeyDown
    50. If e.KeyCode = Keys.Enter Then
    51. b_send.PerformClick()
    52. End If
    53. End Sub
    54. End Class

    Moin,

    wieder mal zeigt sich, dass Youtube-Videos zum Lernen eher ungeeignet sind. Nicht nur, dass du nicht weißt, wie der Code tickt, noch dazu ist er eher Grütze. Das macht aber nichts, das bekommen wir hin :D

    Als allererstes setze die richtigen Einstellungen und lies ein Buch. Du hast hier schon einige Beiträge, daher vermute ich mal, dass du das schon kennst. Es ist außerdem ratsam, "Böses" zu vermeiden.

    Dann zum Code: Jede Menge "böse" Funktionen. Außerdem ist es nicht vorteilhaft, mit einem Timer auf Verbindungsgesuche zu pollen. Außerdem ist TryCatch ist ein heißes Eisen. Was auch nichts bringt, ist, wie du schon bemerkt hast, dass nur der Server die Nachrichten erhält. Besser ist es, Server und Client zu trennen. Wir haben hier auch den Multiserver (TCP), vielleicht bringt der dich weiter.
    Mit freundlichen Grüßen,
    Thunderbolt
    Danke für die Rückmeldung @Thunderbolt. :D

    Mit "Böse" meinst du VB6 auf VB NET übertragen? (Ich schau mir mal den Thread an).

    Dann werde ich mich mal an das Server | Client Thema setzen.
    Bzgl. dem Buch: ich habe mir "Einstieg in Visual Basic 2015: Ideal für Programmieranfänger geeignet" von Theis geholt.
    Kann ich die beiden für die Basics gleichsetzen oder ist dein genanntes von anderer Qualität?
    Zum Theis-Buch: Der @ErfinderDesRades hat da auf seiner Seite was zu geschrieben, die ist aber leider offline. Das Buch, das er dort empfohlen hat, war das Löffelmann-Buch.
    Ich zitiere daher mal...

    ErfinderDesRades schrieb:

    toeller schrieb:

    Einstieg in Visual Basic 2010 von Thomas Theis
    Bist du mal meinem Link: dieses Buch Lesen gefolgt?

    Dort empfehle ich ein glaub wirklich gutes Buch - ebenso kostenlos wie der Galileio-Schrott. Mit dem Theis-Buch setze ich mich dort auch ausführlich auseinander, weil das ist ein wirklich abschreckendes Beispiel.

    Natürlich kannst du meinen Argumenten in vielen Punkten nicht folgen, denn dazu müssteste erstmal proggen können - aber glaub mir: meine Argumentation ist stichhaltig, und mit zunehmenden Skills wirst du ihr folgen können.
    Nur wenn du dich mit dem Theis-Buch belastest wirst du dir eine unübersehbare Menge schlechter Angewohnheiten und Anti-Pattern angewöhnen.
    Mit freundlichen Grüßen,
    Thunderbolt

    Sam85 schrieb:

    ich habe mir "Einstieg in Visual Basic 2015: Ideal für Programmieranfänger geeignet" von Theis geholt.
    Kann ich die beiden für die Basics gleichsetzen oder ist dein genanntes von anderer Qualität?
    Nein, der Theiss ist Schrott und ist ein schlimmer AnfängerVerderber.
    Jo mein Webspace wurde mir leider abgeschaltet.
    Ich hab glaub noch meinen Räsonnier-Text, wo ich den Theiss einfach so durchblätter, und glaub so 5 Beispiele aufzähle, was da alles an Mist drinne ist (zum Teil hanebüchen), und dann abbreche.
    Soll ich das hier nochmal iwo neu einstellen?
    Kommt mir bisserl doof vor, ein Tutorial über ein schlechtes Buch zu veröffentlichen...
    Zumal er neu aufgelegt hat - da müsste man die neueren Auflagen nochmal sichten - aber wird nix wirklich neues und besseres drinne stehen.
    Nun ich versuche einfach nur dazu zu lernen, bin kein Programmierer, noch in diesem Bereich tätig aber es macht mir sehr viel Spass. Und ich bin hier gut aufgehoben :D, Tips und Tuts wenn man fragt und learning by doing klappt bei mir ganz zufriedenstellend..vorerst.