Chat programm mit ip adresse

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von mox.

    Chat programm mit ip adresse

    Hey Leute, Ich wollte mal fragen da ich letztens einen Chat programmiert habe, wo via ip adresse Nachrichten schickt. Ich hatte das mit einem Tutorial gemacht und habe dann bei anderen Tutorials geschaut, denn es klappte zwar aber nach jeder dritten Nachricht stürzt es ab ich habe keine Ahnung wie ich das hinbekommen könnte und brauche eure Hilfe. Danke im Vorraus :thumbsup:

    *Topic verschoben*
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    1. Verwende bitte mal Satzzeichen! Man kann Deinen Text kaum lesen. :(
    2. Was hast Du für ein Tutorial verwendet? Wie sieht Dein Code aus? Wir können schließlich nicht durch unsere Glaskugel Dein Problem ermitteln.
    3. Was nutzt Du für Protokolle für die Transportschicht? TCP, UDP? Passen die entsprechenden Ports?
    Erkläre Dein Problem bitte nochmal in aller Ruhe und detailliert.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Poste doch mal deinen bisherigen Code
    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
    Da kommt doch sicher auch ne Fehlermeldung. Was sagt die?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Threading
    3. Imports System.Net.Sockets
    4. Public Class Form1
    5. Dim listener As New TcpListener(8888)
    6. Dim client As TcpClient
    7. Dim Message As String
    8. Private Sub listening()
    9. listener.Start()
    10. End Sub
    11. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    12. TextBox2.ReadOnly = True
    13. Dim thread As New Thread(New ThreadStart(AddressOf listening))
    14. listener.Start()
    15. End Sub
    16. Private Sub TextBox3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3.Click
    17. TextBox3.Text = ""
    18. TextBox3.ForeColor = Color.Black
    19. End Sub
    20. Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
    21. TextBox1.Text = ""
    22. TextBox1.ForeColor = Color.Black
    23. End Sub
    24. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    25. Dim Uhrzeit As String = My.Computer.Clock.LocalTime.ToShortTimeString
    26. client = New TcpClient(TextBox1.Text, 8888)
    27. Dim streamw As New StreamWriter(client.GetStream())
    28. streamw.Write(TextBox3.Text)
    29. TextBox2.AppendText("Sie haben geschrieben: " & Uhrzeit & " " & TextBox3.Text)
    30. streamw.Flush()
    31. TextBox3.Clear()
    32. End Sub
    33. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    34. Dim Uhrzeit As String = My.Computer.Clock.LocalTime.ToShortTimeString
    35. If listener.Pending = True Then
    36. Message = ""
    37. client = listener.AcceptTcpClient
    38. Dim streamr As New StreamReader(client.GetStream())
    39. While streamr.Peek > -1
    40. Message = Message + Convert.ToChar(streamr.Read()).ToString
    41. End While
    42. TextBox2.AppendText(vbCrLf & "Er hat geschrieben: " & Uhrzeit & " " & Message)
    43. End If
    44. End Sub
    45. End Class


    und an mrMo ne leider nicht es kommt nur Keine Rückmeldung
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Hallo @Toni03

    Ist jetzt nur ein gut gemeinter Tipp:
    Wer mit

    Toni03 schrieb:

    TextBox2

    Toni03 schrieb:

    TextBox1_Click
    arbeitet, braucht sich nicht wundern, wenn der Code Fehlerbehaftet ist. Bitte sorge dafür eine konsistente (=durchgehende) Namensgebung zu verwenden. So etwa ein Passworteingabefeld nicht einfach als TextBox5 stehen lassen, sondern sowas wie tbPasswortLogin verwenden.

    Toni03 schrieb:

    Dim Uhrzeit As String = My.Computer.Clock.LocalTime.ToShortTimeString
    Alle Funktionen, die du über My.Computer erreichst: Böse Funktionen vermeiden

    Toni03 schrieb:

    Er hat geschrieben:
    Und was ist, wenn dein Gegenüber eine Frau ist? ;D

    Toni03 schrieb:

    streamr.Peek>-1
    Peek ist eine Methode, dewegen auch bitte streamr.Peek() > -1 (Methodenklammern!) verwenden - hilft ungemeint, wenn man nachher nur durchs auf-den-Code-sehen erkennt, was Funktionen und was Properties sind.

    Toni03 schrieb:

    Message = Message + Convert.ToChar(streamr.Read()).ToString
    Hier ein Verbesserungstipp: liest nicht in einer Schleife jedes Zeichen aus, Konvertiere den Integerwert in einen Char und dann in einen String, sondern verwende vom StreamReader die Methode ReadToEnd. Die liefert dir den gesamten Inhalt des Streams als String (eventuell noch im Konstruktor des StreamReaders das Encoding (UTF-8/ASCII) angeben.

    Toni03 schrieb:

    Keine Rückmeldung

    Toni03 schrieb:

    nach jeder dritten Nachricht stürzt es ab
    Ja was jetzt? Läuft das Programm einfach weiter, du erhälst aber keine Antwort oder beendet sich das Programm mit einer Fehlermeldung?
    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
    Das ist dann das da kommt das programm funktioniert nicht mehr "Beenden" oder "Weiter ausführen". Bei "Weiter ausführen" kommt das gleiche Fenster später wieder
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Nutzt Du 64 Bit? Lagere mal Deinen Code aus dem Form_Load ins Shown-Event aus. Da gibt es nämlich einen entsprechenden Bug und dann kann auch der Debugger nichts mehr anzeigen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. TextBox2.ReadOnly = True
    3. Dim thread As New Thread(New ThreadStart(AddressOf listening))
    4. listener.Start()
    5. End Sub


    WTF? ich glaube du meinst doch thread.Start() oder?

    Dein Programm macht mit einem Timer schonma garkein sinn! Ein Timer kann nich wissen wann eine nachricht ankommt! Macht das in einem thread (wie anscheint geplant aber nich umgesetzt wurde...)
    Kontrollier mal welche die 3. nachricht ist und hau da mal den debugger dran. Dann siehst du was abkackt.
    Ich geh ma davon aus das irgendetwas geschickt wird das er nicht anzeigen kann ;)

    Muss ich den text ohne satzzeichen umschreiben oder verstehst du das auch so?



    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim Uhrzeit As String = My.Computer.Clock.LocalTime.ToShortTimeString
    3. If listener.Pending = True Then


    .....
    Ich habe noch einmal geschaut und habe es hin bekommen danke das ist echt gut so ein Forum zu kennen. Falls wer Den Code braucht, hier:

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    3. '165; 570_
    4. Panel2.Visible = False
    5. Me.Size = New Size(499, 598)
    6. Me.MaximizeBox = False
    7. End Sub
    8. Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
    9. BTN_OK.Visible = True
    10. End Sub
    11. Private Sub BTNOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_OK.Click
    12. Panel2.Visible = True
    13. End Sub
    14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    15. If BTN_OK.Visible = True Then
    16. End If
    17. End Sub
    18. End Class
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Der Code macht doch gar nichts? Was genau war denn jetzt das Problem und was die Lösung?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Jedes mal wenn du eine neue Nachricht versendest instanzierst du einen neuen TcpClient ohne den alten frei zugeben. Dazu überschreibst du die Variable Client dann auch noch im Timer_Tick -Event. Den StreamWriter gibst du ebenfalls nicht frei, erstellst dir aber bei jedem Sendevorgang einen neuen. Sonderlich verwunderlich ist es nicht das dir das ganze um die Ohren fliegt.

    Den StreamReader solltest du in einem Using -Block verwenden.
    Neben dem TcpClient der sich mit dem TcpListener verbindet solltest du noch einen weiteren verwenden der deinem TcpListener als ClientHandler dient. Die Instanzierung des TcpClient beim senden einer Nachricht solltest du gegen die Abfrage "ist der Client mit einem Server verbunden" ersetzen.

    Toni03 schrieb:

    Ich habe noch einmal geschaut und habe es hin bekommen danke das ist echt gut so ein Forum zu kennen. Falls wer Den Code braucht, hier:


    Im Gegensatz zu dir verstehen wir deinen Code den du hier als Lösung präsentierst und den Part den du da gepostet hast wird wohl kaum der relevante Part sein der dein Problem verursacht/gelöst hat.

    @Fakiz hat dir ja bereits einige Hinweise gegeben die du berücksichtigen solltest.

    Von mir nur der kleine aber feine Tipp:
    Reagiert ein Programm nicht mehr, bedeutet dies nicht automatisch das es abgestürzt ist. Oft dauert etwas einfach nur ungewöhnlich lange -> hier musst du rausfinden was. Daher: Lerne deinen Code zu debuggen Debuggen, Fehler finden und beseitigen

    Und bitte: Benenne die Controls gescheit. Wenn du die Namen erst nach dem anlegen der Events vergeben hast, benenne die Events um bzw. mach nen neues das den Namen des Controls beinhaltet. Keiner hier weiß was Button1 oder Panel12 ist.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Toni03 schrieb:

    Ich habe noch einmal geschaut und habe es hin bekommen danke das ist echt gut so ein Forum zu kennen. Falls wer Den Code braucht, hier:

    Ja ich weiß das berücksichtige ich das nächste mal. Trotzdem Danke.
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down
    Nein, wieso nächstes Mal? Poste doch bitte einfach einmal detailliert, was jetzt los war und wie Du es gelöst hast. So bringt das hier alles niemandem etwas...

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Es lag daran das wenn die nachricht einfach nur "" war das dann es abstürzte.
    if Brain.Enabled = False Then
    Process.start("C:\Brain.exe")
    End if
    __________________________________________________

    Error: Brain.exe not found System shut down

    Trade schrieb:

    einmal detailliert
    Heißt entsprechenden Code posten, zeigen, was man verändert hat und warum das abgestürzt ist. Das ist doch nicht so schwer. Mach das bitte doch einfach mal. Wenn jetzt hier jemand anderer Deinen Thread findet, dann bringt ihm das nichts.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Fakiz schrieb:

    Jedes mal wenn du eine neue Nachricht versendest instanzierst du einen neuen TcpClient ohne den alten frei zugeben. Dazu überschreibst du die Variable Client dann auch noch im Timer_Tick -Event. Den StreamWriter gibst du ebenfalls nicht frei, erstellst dir aber bei jedem Sendevorgang einen neuen.

    @Toni03 Du solltest dennoch deine Architektur gründlich überdenken. Und am besten in einem frühen Stadium der Entwicklung so wie jetzt. Wenn du den Chat erst einmal erweiterst, wird es umso aufwendiger den Kern des Chats zu erneuern. Wenn du Fragen hast, kannst du mich diesbezüglich auch gerne per PN anschreiben. Ich hab da einiges an Erfahrung mit TCP Chats. ;)

    Grüße
    Väinämö

    Toni03 schrieb:

    Es lag daran das wenn die nachricht einfach nur "" war das dann es abstürzte.


    Aha, und die 3. Nachricht war immer ""?
    Bitte poste doch einfach mal deinen ganzen Code aus folgenden Gründen:
    1. Damit die Chat Experten deinen Code prüfen und dir Tipps geben können und
    2. Damit, falls jemand auch so ein Problem hat, derjenige hier eine saubere Lösung (nach berücksichtigung der Tipps) findet
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen