.NET - TCP/IP Chat

  • VB

  • Jannik
  • 3479 Aufrufe 6 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • .NET - TCP/IP Chat

    Hey Leute,

    ich bin gerade erst mit TCP/IP angefangen und wage mich an einen Chat ;) Alles funktioniert auch wunderbar lokal, nur wenn ich meine dynamische IP nehme, klappt es nicht mehr, hat jemand eine Ahnung was falsch ist?

    PHP-Quellcode

    1. Imports System.Threading
    2. Imports System.IO
    3. Imports System.Net.Sockets
    4. Public Class Main
    5. Dim port As Integer = 8000
    6. Dim host As String = "127.0.0.1" // Das in IP umändern
    7. Dim listener As New TcpListener(port)
    8. Dim client As TcpClient
    9. Dim message As String = ""
    10. Dim user As String = "Jannik"
    11. Dim user2 As String = "Bottie"
    12. Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    13. Dim listthreat As New Thread(New ThreadStart(AddressOf listening))
    14. listthreat.Start()
    15. Timer1.Enabled = True
    16. End Sub
    17. Private Sub listening()
    18. listener.Start()
    19. End Sub
    20. Private Sub Main_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    21. listener.Stop()
    22. End Sub
    23. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    24. client = New TcpClient(host, port)
    25. Dim writer As New StreamWriter(client.GetStream())
    26. writer.Write(TxtSend.Text)
    27. TxtGet.Text &= user & " (" & Format(Now, "dd/MM/yyyy hh:mm:ss") & "): " & TxtSend.Text & vbNewLine
    28. writer.Flush()
    29. End Sub
    30. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    31. Try
    32. If listener.Pending = True Then
    33. message = ""
    34. client = listener.AcceptTcpClient
    35. Dim reader As New StreamReader(client.GetStream())
    36. While reader.Peek > -1
    37. message += Convert.ToChar(reader.Read()).ToString
    38. End While
    39. TxtGet.Text &= user2 & " (" & Format(Now, "dd/MM/yyyy hh:mm:ss") & "): " & message & vbNewLine
    40. TxtSend.Clear()
    41. End If
    42. Catch
    43. End Try
    44. End Sub
    45. End Class
    Alles anzeigen


    Vielleicht liegt es ja an dem Port, ich weiß es nicht...

    Vielen Dank für eure Ansätze ;)

    Edit:\\

    Okay, es liegt an den Ports, gibt es eine möglichkeit, ports freizugeben in vb.net?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Jannik ()

  • Erst mal einige Dinge testen:
    - Hat den Port schon jemand offen? (netstat -an findet das für dich heraus)
    - Mag der Firewall nicht, dass Du hier einen Port auf machst?
    - mehr fällt mir gerade nicht ein (noch vieeeelll zu früh)
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...
  • Eigentlich kein Problem.
    Wenn der Rechner (R1) auf eingehende Nachrichten hört (Listener), dann macht er den definierten Port auf. Verbindet man sich von einem anderen Rechner (R2) auf diesen Port, so macht TCP/IP auf R2 einen "zufälligen" Port auf. Also irgendwie so:

    R1 macht Port 8000 auf und lauscht.
    R2 will sich mit Port 8000 auf R1 verbinden.
    R2 macht einen beliebigen (freien) Port bei sich auf (oder nutzt ihn eben).
    R2 geht über den geöffneten Port auf den Port 8000 von R1.

    Also können beide Rechner problemlos auf Port 8000 lauschen.
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...
  • Eine IP-Adresse zusammen mit der Portnummer spezifiziert einen Kommunikationsendpunkt, einen sogenannten Socket. Die Socketnummern von Quelle und Ziel identifizieren die Verbindung (socket1, socket2). Eine Verbindung ist durch die Angabe dieses Paares eindeutig identifiziert. Möchte z.B. ein Host A eine Verbindung zu einem entfernten Host B aufnehmen, z.B. um den Inhalt einer Webseite anzuzeigen, so wird auf der TCP-Schicht als Zielport die Portnummer 80 für das Hypertext Transfer Protocol (http) angegeben. Host A, der den Dienst auf Port 80 von Host B in Anspruch nehmen möchte gibt als Quellport eine dynamische Portnummer aus dem Bereich 49.152 - 65.535 an, damit die von ihm gewünschten Daten von Host B an ihn zurückgeliefert werden können. Damit ist die Verbindung auf der TCP-Schicht über die Angabe von Quell- und Zielport eindeutig identifiziert. Zusammen mit den IP-Adressen bilden die Portnummern die beiden Sockets, die die Kommunikation zwischen Host A und Host B eindeutig kennzeichnen.
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...