Hi Leute,
also ich habe vor für meine Freunde ein kleines Chatprogramm schreiben. Dies soll sowohl im Lokalen Netzwerk als auch im Internet Funktionieren.
Ich persönlich habe noch nicht soviel Erfahrung mit Netzwerkprogrammierung.
Mein Programm funktioniert bis jetzt im Lokalen Netzwerk schon ganz gut. Wenn ich nun aber meinem Kumpel der 20km weit entfernt sitzt sage er soll mir ne Nachricht an meine IP senden dann kommt nix an :O
Bitte Helft mir!!!
Kommen wir nun zum Quellcode meine Programms:
Also fangen wir mit dem Aufrufen der IP´s an.
Die Lokale IP frag ich über DNS.GetHostName ab.
Hier der Code dazu:
So da funktioniert perfekt.
Jetzt noch die Internet IP. Diese Rufe ich über einen externen Server auf.
Auch das funktioniert soweit ganz gut.
So und jetzt kommt mein Problem:
Dieser Code Funktioniert perfekt im Lokalen Netzwerk.
Aber sobald man eine Nachricht über Internet verschickt kommt diese nicht an
kann mir bitte sagen was ich da genau falsch mache!
Für Hilfe währ ich sehr dankbar.
Wer sich den gesamten Quellcode anschauen möchte der Findet diesen Im anhang.
*Topic verschoben*
also ich habe vor für meine Freunde ein kleines Chatprogramm schreiben. Dies soll sowohl im Lokalen Netzwerk als auch im Internet Funktionieren.
Ich persönlich habe noch nicht soviel Erfahrung mit Netzwerkprogrammierung.
Mein Programm funktioniert bis jetzt im Lokalen Netzwerk schon ganz gut. Wenn ich nun aber meinem Kumpel der 20km weit entfernt sitzt sage er soll mir ne Nachricht an meine IP senden dann kommt nix an :O
Bitte Helft mir!!!
Kommen wir nun zum Quellcode meine Programms:
Also fangen wir mit dem Aufrufen der IP´s an.
Die Lokale IP frag ich über DNS.GetHostName ab.
Hier der Code dazu:
VB.NET-Quellcode
- ''' <summary>
- ''' Ermittelt Lokale Ip
- ''' </summary>
- ''' <returns>Gibt Netztwerk-IP als String zurück</returns>
- ''' <remarks></remarks>
- Function NetworkIP() As StringDim LocalHostName As String = Dns.GetHostName()
- Dim ipEnter As IPHostEntry = Dns.GetHostByName(LocalHostName)
- Dim IpAdd() As IPAddress = ipEnter.AddressList
- Return IpAdd(0).ToString
- End Function
So da funktioniert perfekt.
Jetzt noch die Internet IP. Diese Rufe ich über einen externen Server auf.
VB.NET-Quellcode
- Dim Uri As New Uri("http://service.jan-welker.de/myip.ashx")
- ''' <summary>
- ''' Ermittelt die Internet Ip vom PC sofern eine Vorhanden ist und gibt sie als String weiter.
- ''' Ist der Pc nicht mit dem Internet verbunden gibt sie "No Internet conection" wieder.
- ''' </summary>
- ''' <returns>Internet-IP als String</returns>
- ''' <remarks></remarks>
- Function Ip_ermitteln() As String
- Try
- Dim Web_Request As HttpWebRequest = HttpWebRequest.Create(Uri)
- Dim Web_Response As HttpWebResponse = Web_Request.GetResponse
- Dim ResStream As System.IO.Stream = Web_Response.GetResponseStream
- Dim ResStreamReader As New StreamReader(ResStream, Encoding.UTF8)
- Dim IP As String = ResStreamReader.ReadToEndResStream.Close()
- Web_Response.Close()
- Return IP
- Catch ex As Exception
- Return "No Internet conection"
- End Try
- End Function
Auch das funktioniert soweit ganz gut.
So und jetzt kommt mein Problem:
VB.NET-Quellcode
- Dim Lauscher As TcpListener
- Dim Client As TcpClient
- ''' <summary>
- ''' Startet das Lauschen auf einem bestimmten Port und verarbeitet die IP´s
- ''' </summary>
- ''' <param name="Ip_Ziel">Ip des Ziel Computers</param>
- ''' <param name="Port">Port der auf dem Zielrechner abgehorcht wird</param>
- ''' <remarks></remarks>
- Sub New_Chat(ByVal Ip_Ziel As String, ByVal Port As Integer)
- Lauscher = New TcpListener(Port)
- Dim Tread_lausche As New Thread(New ThreadStart(AddressOf belauschen))
- Lauscher.Start()Tread_lausche.Start()
- End Sub
- ''' <summary>
- ''' Sendet die Nachrichten an die Ziel IP
- ''' </summary>
- ''' <param name="Message">Die zu schickende Nachricht</param>
- ''' <param name="IP_ziel">Ip des Ziel PC´s</param>
- ''' <param name="Name">Name des Senders</param>
- ''' <param name="Port">Port auf dem gesendet wird</param>
- ''' <remarks></remarks>
- Sub Senden(ByVal Message As String, ByVal IP_ziel As String, ByVal Name As String, Optional ByVal Port As Integer = 55)
- 1:
- Try
- Client = New TcpClient(IP_ziel, Port)
- Dim writer As New StreamWriter(Client.GetStream())writer.Write(Name & "| " & Message)
- writer.Flush()
- Catch ex As ExceptionMsgBox(ex.Message)
- GoTo 1
- End Try
- End Sub
- ''' <summary>
- ''' lauscht solang auf einem Port bis das Programm beendet wird
- ''' wenn nachricht eintrifft gibt die Funktion sie als String wieder
- ''' </summary>
- ''' <returns>Empfange nachricht</returns>
- ''' <remarks></remarks>
- Function belauschen() As String
- Do
- If Lauscher.Pending = True ThenClient = Lauscher.AcceptTcpClient()
- Dim Eintreffende_Message As String = NothingDim reader As New StreamReader(Client.GetStream)
- Try
- While reader.Peek > 1
- Eintreffende_Message += Convert.ToChar(reader.Read()).ToString
- End While
- Dim pos As Integer = InStr(Eintreffende_Message, "|")
- Dim senderIP As String = Mid(Eintreffende_Message, 1, pos - 1)
- Dim message As String = Mid(Eintreffende_Message, pos + 1)
- Return senderIP & " | " & message & vbCrLf
- Catch ex As Exception
- MsgBox("Die nachricht konnte nicht empfangen werden da: " & ex.Message)
- End Try
- Else
- Return Nothing
- End If
- Loop
- End Function
Dieser Code Funktioniert perfekt im Lokalen Netzwerk.
Aber sobald man eine Nachricht über Internet verschickt kommt diese nicht an
kann mir bitte sagen was ich da genau falsch mache!
Für Hilfe währ ich sehr dankbar.
Wer sich den gesamten Quellcode anschauen möchte der Findet diesen Im anhang.
*Topic verschoben*
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Paul-Jeschke“ ()