TcpListener der nicht aufs lokale Netzwerk limitiert ist?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    TcpListener der nicht aufs lokale Netzwerk limitiert ist?

    Hallo!
    In meinem (Datenauswertungs-)Programm möchte ich vom Benutzerprogramm via internet ports einen Integer (Anzahl der richtigen Fragen nach einem Quiz; Zahl der Fragen: 40) gesendet bekommen. Dabei ist es wichtig, dass die Anzahl der richtigen Antworten möglichst schnell gesendet wird (deswegen ports lieber als FTPserver).
    Den Integer sende ich über die TcpClient-Klasse, jedoch empfange ich die Daten auf dem Datenauswertungsprogramm nicht, da die TcpListener-Klasse meines Erkentnissstandes nach an das lokale Netzwerk gebunden ist. Das heißt, bei bisherigen Versuchen mit WAN-IP statt lokaler IP wurden stets Fehlermeldungen ausgegeben. ;(
    Meine Frage ist jetzt die:
    Gibt es eine Methode, die einen Integer/String via ports verschicken kann, das nicht auf das lokale Netzwerk beschränkt ist?
    Danke - Kylo :D

    PS:
    Der Port über den ich den Integer versenden möchte (5555) ist in meinem Rooter geöffnet.
    Die Firewall blockiert auch nichts! :)
    Hey Leute! Sorry für die späte Antwort!
    @Rinecamo: Ich verwende zurzeit als Rooter die Vodafone Easybox 904 xDSL (Ports sind geöffnet i.imgur.com/DhgRFb1.png)

    Ich habe zwei Ansätze für den TcpListener, den einen mache ich über eine Funktion mit Do Loop (poste ich später nochmal weil ich den gerade auf meinem zweit-PC habe), der zweite Ansatz ist der von dem damaligen SemperVideo Tutorial (youtube.com/watch?v=W1g-sufUI38).
    Dessen code sah so aus:
    Imports:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Threading
    3. Imports System.Net.Sockets


    Allgemeine Variablen:

    VB.NET-Quellcode

    1. Dim listener As New TcpListener(25543)
    2. Dim nachricht As String = ""
    3. Dim client As TcpClient


    Im Form_Load Ereignis einen seperaten Thread deklariert & gestartet etc.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim listthread As New Thread(New ThreadStart(AddressOf listening))
    3. listthread.Start()
    4. End Sub
    5. Private Sub listening()
    6. listener.Start()
    7. End Sub


    Und dann einen Timer mit den Eigenschaften .Interval = 1 und .Enabled = True

    VB.NET-Quellcode

    1. If listener.Pending = True Then
    2. nachricht = ""
    3. client = listener.AcceptTcpClient()
    4. Try
    5. Dim reader As New StreamReader(client.GetStream())
    6. While reader.Peek > -1
    7. nachricht = nachricht + Convert.ToChar(reader.Read()).ToString
    8. End While
    9. Label1.Text = Label1.Text & nachricht & vbCrLf
    10. Catch ex As Exception
    11. MsgBox("Error in Timer (" & ErrorToString() & ")")
    12. End Try
    13. End If


    Wie gesagt, fängt der Timer zurzeit nur alle Tcp-Nachrichten im lokalen Netzwerk ab, nicht globalen :(
    Genauso auch mein zweiter Ansatz mit Do Loop (ich poste den in ~1-2 Stunden)
    @EaranMaleasi: Wie sah denn deine Herangehensweise aus?
    Gruß, Kylo :)

    Edit: Habe die Firewall nochmal kontrolliert, es wird, soweit ich das beurteilen kann, nichts abgeblockt :/
    @ErfinderDesRades: Ich habe den Code von SemperVideo zwar erstmal abgeschrieben, doch danach schaue ich immer genau rüber um zu verstehen was gemacht wurde und warum das ganze funktioniert (es wird auch im Video teilweise erklärt).
    @EaranMaleasi: Dass der Konstruktor veraltet ist hatte ich nicht gedacht - dann überarbeite ich das ganze nochmal. Der Output von

    VB.NET-Quellcode

    1. Debug.WriteLine(listener.LocalEndpoint.ToString)
    ist 0.0.0.0:25543 (25543 war mein ausgesuchter port).

    Insgesamt schließe ich dann erstmal den Thread und lese mir eure Vorschläge durch - Danke für die Hilfe! :)
    aber dass das Teil scheinbar nicht brauchbar ist, sollte dir zu denken geben.
    Es ist ein zig - oder glaub sogar hundertfach bestätigter Erfahrungswert: utube-tuts sind Schrott.
    Da produzieren Hurgler, die noch nichtmal was von Option Strict gehört haben.
    Oder die einen Winforms-Timer mit einem Interval von 1ms (!) zu Tode quälen (um mal SemperVideo-konkret zu werden)
    Zumal in einem Chat ein Timer ühaupt nix verloren hat.