.NET - TCP/IP Chat VB 

Status
Für weitere Antworten geschlossen.

Jannik

Registered +
Registriert
Apr. 2008
Beiträge
216
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:
Imports System.Threading
Imports System.IO
Imports System.Net.Sockets

Public Class Main
Dim port As Integer = 8000
Dim host As String = "127.0.0.1" // Das in IP umändern
Dim listener As New TcpListener(port)
Dim client As TcpClient
Dim message As String = ""
Dim user As String = "Jannik"
Dim user2 As String = "Bottie"

Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim listthreat As New Thread(New ThreadStart(AddressOf listening))
listthreat.Start()
Timer1.Enabled = True
End Sub

Private Sub listening()
listener.Start()
End Sub

Private Sub Main_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
listener.Stop()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
client = New TcpClient(host, port)
Dim writer As New StreamWriter(client.GetStream())
writer.Write(TxtSend.Text)
TxtGet.Text &= user & " (" & Format(Now, "dd/MM/yyyy hh:mm:ss") & "): " & TxtSend.Text & vbNewLine
writer.Flush()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Try
If listener.Pending = True Then
message = ""
client = listener.AcceptTcpClient
Dim reader As New StreamReader(client.GetStream())
While reader.Peek > -1
message += Convert.ToChar(reader.Read()).ToString
End While
TxtGet.Text &= user2 & " (" & Format(Now, "dd/MM/yyyy hh:mm:ss") & "): " & message & vbNewLine
TxtSend.Clear()
End If
Catch

End Try
End Sub
End Class

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?
 
Zuletzt bearbeitet von einem Moderator:
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)
 
Ich hab einen Port geöffnet und es funktioniert auch, aber wenn ich das auf einem anderen Rechner laufen lasse, ist der Port ja nicht mehr offen, wie krieg ich das "universal" hin? :)
 
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.
 
Hmm, das versteh ich noch nicht ganz, wie sieht das jetzt genau aus mit dem zufälligen Port?
 
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.
 
Ich denke das reicht mir fürs erste, das projekt ist sowieso grad etwas eingefroren, deswegen schließ ich das Thread mal ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten