Zum Inhalt springen

Tcp <wie, wo, was???


Empfohlene Beiträge

Geschrieben

Hey leute :new.

Ich programmiere sehr gerne abundzu in Visual Basic.

Nun bin ich dabei per winsock eine TCP verbindung zwischen 2 rechnern herzustellen.

OK, ich versuche es zumindest...

DENN:

Es klappt nicht.

ABER:

Das programm funktioniert. Es liegt kein Programmierfehler vor xD.

UND:

es funktioniert über Hamachi (Online-Netzwerk von Rechnern)

VERMUTUNG:...

ich besitze einen Fritzbox Router (3131), muss ich da etwas einstellen, dass mein kumpel mit mir connecten kann?

Port freigeben etc?

über die lokale IP 127.0.0.1 geht es ja... und über hamachi geht es ja auch ohne Probleme...

Fehlercode server:

5 Die angeforderte Adresse ist in diesem Kontext ungültig

fehlercode client:

5 Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat

Hat von euch da einer eine Vermutung oder weiß jemand etwas ganaueres?

Danke schon mal an alle die sich die zeitgenommen haben diesen Beitrag zu lesen und evt. antworten :)

Gruß Mr.T

Geschrieben

Deine privaten IP-Adressen werden hinter der IP maskiert, die dir vom ISP zugewiesen wurde. Das nennt man NAT. Und um Dienste, hinter einem NAT Gateway anzusprechen, bedarf es nun mal Portweiterleitungen. Man muss dem Router sagen, wohin er Verkehr weiterleiten soll, die auf einem bestimmten Port ankommt.

Geschrieben

Okay danke schonmal.

Bei meiner Fritzbox gibt es den Menüpunkt Freigaben(Portfeigabe) wo follgendes steht:

Portfreigabe aktiv für []

Bezeichnung []

Protokoll []

von Port [] bis Port []

an IP-Adresse []

an Port []

Was soll ich da nun eintragen und zu welcher IP soll der Server/Client versuchen zu connecten?

ich habs mal selbst versucht:

Portfreigabe aktiv für [Andere Anwendungen]

Bezeichnung [server_Client]

Protokoll [TCP]

von Port [13000] bis Port [13000]

an IP-Adresse [192.168.178.22]

an Port [13000]

Geschrieben (bearbeitet)

Sicherlich :D

Port 13000

Nur ist die IP die ich dort angegeben hab nun auch die zu welcher ich connecten muss? (das müste die Private sein, die die vom Router an die einzelnen PC's vergeben wird)

und nicht die "Nomale" jetzt grad: 87.123.114.44

EDIT: Da fällt mir ein das ich ja für Programme wie Hamachi auch keine Portfreigabe verwenden muss...

Bearbeitet von Mr_T
Geschrieben

Okay danke! :)

Das werd ich dann mal so probieren.

ps.: Gibt es irgend welche Risiken? Wenn ich einfach einen Port freigebe, könnte ja jeder darauf zugreifen :confused:

Geschrieben (bearbeitet)

lol, du hast dein Benutzerbild geändert xD

'Und es so zu verwirklichen wie es z.B. Hamachi macht ist es nicht möglich?

EDIT: hab mir nochmal die risiken durchgelesen: http://www.spielerboard.de/showthread.php?t=305326

Nochetwas was ich nicht ganz verstehen: Der Server 'hört ja dem Port zu'.

Der Clinet sendet einen stream an den Port.

-Also kommt von außen eine Verbindung bzw. kommen daten zum server. soweit, soklar.

Warum geht es auch andersherum? :wenn der Server in den stream schreibt erhält es ja ebenfalls der Clinet... OHNE Portfreigabe. Warum? Ich meine das ist doch unsicher für den client... er erhält einfach i-welche daten.

ich glaub irgendwas hab ich nich nicht gecheckt... aaaaah es liegt mir auf der Zunge...

Bearbeitet von Mr_T
Geschrieben

Wenn man durch einen NAT-Router von innen eine verbindung nach aussen initialisiert, dann wird der Port vom NAT-Router an den Server mitgegeben, auf dem eine Antwort erwartet wird. Kommt dann auf diesem Port eine Antwort an, so wird sie automatisch an den PC weitergeleitet, der die Anfrage gestellt hat. Dabei muss der interne und der externe Port keinesfalls der gleiche sein, sondern kann auch ein komplett anderer sein.

Wenn aber von aussen nach innen die Verbindung initialisiert werden soll, gibt es ja keinen PC, der die Anfrage von innen nach aussen initialisiert und somit wird auch auf keinem Port eine Antwort erwartet. Somit wüsste der NAT-Router nicht, an welchen PC er die Pakete ausliefern soll, wenn er keine feste Portweiterleitung eingerichtet hat für den Port, auf dem er das Paket bekommt. Diese Ports liegen übrigens immer in der Portrange oberhalb Port 1023.

Sollte kein Router, sondern nur ein Modem benutzt werden, so kann der Rechner direkt unter seiner externen IP unter allen Ports erreicht werden.

Als dritte Möglichkeit kann man auf dem Router noch für einen PC die meist "DMZ" genannte Option einstellen, so dass alle Ports auf diesen Router weitergeleitet werden, abgesehen von den Ports, die durch andere Verbindungen von innen nach aussen durch den NAT-Router als Antwortports "reserviert" wurden. Davon würde ich jedoch definitiv abraten, da dein PC dann, wie wenn du per Modem online bist, nur durch deine Firewall geschützt im Internet steht und somit leichtes Opfer von Angreifern werden kann, da er auf allen Ports direkt angesprochen werden kann.

Bei allen drei Varianten muss aber evtl noch der Port in der benutzten Firewall freigeschaltet werden, da das Paket ansonsten einfach dort verworfen wird.

Benutzt wird aber zum verbinden von aussen immer die IP, die du vom Provider zugeordnet bekommen hast. Also die WAN IP deines Routers oder Modems.

Geschrieben

Erstmal :uli !

So. Um mal ein weinig Licht ins dunkel zu bringen poste ich hier mal das Script, denn laut

Benutzt wird aber zum verbinden von aussen immer die IP, die du vom Provider zugeordnet bekommen hast. Also die WAN IP deines Routers oder Modems.

müsste es mit der WAN IP ja funktionieren.

SERVER:


Imports System.Net.Sockets

Imports System.Text


[...]


    Private SimpleServer As TcpListener

    Private Client As New TcpClient

    Private Stream As NetworkStream

    Dim bytes() As Byte



    Private Sub OnConnect(ByVal ar As System.IAsyncResult)


        Client = SimpleServer.EndAcceptTcpClient(ar)

        Stream = Client.GetStream


        ReDim bytes(Client.ReceiveBufferSize)

        Stream.BeginRead(bytes, 0, CInt(Client.ReceiveBufferSize), AddressOf onGetData, New Object)


    End Sub



    Private Sub onGetData(ByVal ar As System.IAsyncResult)


        Dim clientdata As String = Encoding.ASCII.GetString(bytes)

        MsgBox(clientdata)

        Stream.BeginRead(bytes, 0, CInt(Client.ReceiveBufferSize), AddressOf onGetData, New Object)


    End Sub



    Private Sub Startbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Startbutton.Click


        SimpleServer = New TcpListener(System.Net.IPAddress.Parse(ipbox.Text), portbox.Text)


        SimpleServer.Start()


        SimpleServer.BeginAcceptTcpClient(AddressOf OnConnect, New Object)


    End Sub
CLIENT:

Imports System.Net.Sockets

Imports System.Text


[...]


    Private SimpleClient As New TcpClient

    Private Stream As NetworkStream


    Dim bytes() As Byte



    Private Sub senttext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles senttext.Click



        Stream = SimpleClient.GetStream


        Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(textbox.Text)

        Stream.Write(sendBytes, 0, sendBytes.Length)


        ReDim bytes(SimpleClient.ReceiveBufferSize)


        Stream.BeginRead(bytes, 0, CInt(SimpleClient.ReceiveBufferSize), AddressOf onGetData, New Object)

    End Sub



    Private Sub onGetData(ByVal ar As System.IAsyncResult)


        Dim clientdata As String = Encoding.ASCII.GetString(bytes)

        MsgBox(clientdata)

        Stream.BeginRead(bytes, 0, CInt(SimpleClient.ReceiveBufferSize), AddressOf onGetData, New Object)


    End Sub



    Private Sub connectbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles connectbutton.Click

        SimpleClient.Connect(ipbox.Text, portbox.Text)

    End Sub

So.

@Crash2001 jetzt müsste doch in die 'ipbox' meine WAN IP rein. Sowohl beim Server als auch beim Client, denn ich will ja den Server aufmachen und der Client soll ja mit mir connecten. Der Port ist ebenfalls der gleiche.

Das Problem ist, das ich nun beim eintragen meiner WAN IP beim SERVER diesen Fehler erhalte:

Die angeforderte Adresse ist in diesem Kontext ungültig

und das dann der Clinet nicht funzt ist klar.

Doch was hat nun die Portfreigabe damit zu tun?

Angenommen meine WAN IP vom Provider ist 123.123.123.123 und meine Private IP vom Router ist 198.198.198.198

Wenn ich nun auch noch eine Portfreigabe verwende:

von Port [13000] bis Port [13000]

an IP-Adresse [198.198.198.198]

an Port [13000]

Und der Server wie auch der Client dem PORT 13000 zugeordnet sind.

WELCHE IP muss ich nun beim Server und welche beim Client angeben?

Geschrieben

AAAAAAAAAAAAAAAAAAAAAAAAAAAh

:upps:upps:upps:upps:upps:upps

WIE kann ich nur so BLÖÖÖÖÖD sein, yaaa???

das geht ja garnicht klar xD

natürlich!!!

der client connecter mit der WAN IP, der Router leitet alles an die Private IP weiter und ZACK es geht. Oh man. :upps:upps:upps

Nochmal ein Großes DANKE an alle die mir auf meinem steinigen weg ;) zum erfolg geholfen haben!

Geschrieben

Hmmm... ich weiss zwar nicht, woran es dann jetzt lag, aber da es ja nun anscheinend funzt, ist es ja ok... :rolleyes:

Kenne mich mit Visual Basic leider nicht so weit aus, dass ich weiss, was da bei dem programm genau gemacht wird...

Geschrieben

Na ist doch ganz einfach.

Wenn kein wissen vorhanden, dann benutze die Boardsuche. wenn da kein ergebnis kommt, mache einen thread auf und poste deine Frage. Ansonsten benutze das ergebnis der Suche. Wenn das Wissen vorhanden ist, fang an zu arbeiten. :rolleyes: Also Text ist das halt nur was länger und sind ja auf einem Fachinformatikerboard...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...