TCP/IP Client

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Hi!

    Wenn der Rechner, der den Host darstellt hinter einem Router hängt, musst du dort im Router den Port "öffnen" (= auf die LAN-IP des Rechners weiterleiten). Wie das geht findest du meistens in der Bedienungsanleitung des jeweiligen Routers.


    mfG Andy
    hm danke andy aber dass mit dem port freigeben klappt nicht ...
    habe im router den port auf meine lan ip freigegeben aber er kann die verbindung trotzdem nich herstellen :(
    wie kann ich das anders lösen? (vllt auch ohne dieses port freigeben, weil ich will dass der server auch auf anderen pcs läuft ohne dass die das freigeben müssen)
    und gleich noch eine frage ;): gibt es in vb.net eine möglichkeit, die internet ip rauszufinden? weil die bräuchte ich ja dann ..
    hab schon überall gesucht aber nix brauchbares gefunden ..
    wäre echt dankbar über gute vorschläge!
    Hi!

    Den Port musst du immer frei geben, sonst weiß der Router ja nicht, was er machen soll, wenn da plötzlich jemand versucht sich "einzuwählen".

    Als IP musst du fürs Inet entweder die InternetIP vom Zielrechner angeben (whatismyip.com) oder den Domainname, wenn auf den Rechner eine zugewiesen ist. Interessant ist hier vielleicht auch das Stichwort DynDNS.


    mfG Andy
    hm aber z.b. bei icq wenn ich da eine datenübertragung beginne muss ich ja auch keine port freigeben .. oder bei anderen programmen ..
    aber das klappt tortzdem nich ich habe den port bei mir am router freigegeben (unter NAT - Network Address Translation - SUA only ...)
    was ist da falsch?
    Original von Bimbam
    hm aber z.b. bei icq wenn ich da eine datenübertragung beginne muss ich ja auch keine port freigeben ..


    doch musst du schon, außer er ist schon frei...

    zitat aus einer ICQ FAQ:


    Damit ICQ 5 korrekt funktionieren kann, ist es nötig, den „Outgoing TCP-Port 5190“ zu öffnen.


    also ports müssen immer und überall frei sein, sonst bekommst du keine connection.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Realy?“ ()

    hm ok danke ... aber das klappt immer noch nicht! ;(
    also icq datenübertragung geht bei mir, d.h. der port müsste frei sein oder??
    aber ich habe jetzt den port bei meinem programm genommen, die internet ip, meine firewall ausgeschaltet ... immer noch nich!
    langsam bin ich am verzweifeln .. was soll ich machen?
    achso ... und könnte ich dann bei meinem programm nicht auch so automatisches portforwarding machen?
    also folgender fehler kommt:
    Zusätzliche Informationen: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat
    Aber bisjetzt habe ich das immer nur an einem pc probiert, also gleichzeitig server und client, kann das etwas daran liegen? aber mit netzwerk ip gings ja ..
    Sollte eigentlich auch so funktionieren...
    Versuch mal den Server auf ner anderen Inet-IP laufen zu lassen.
    Ansonsten brauchen wir wohl den Quellcode.

    Ist nur ne Vermutung, dass das bei ICQ so gelöst wird, aber wenns so ist: Wikipedia: UPnP
    Habe damit aber noch keine Erfahrungen gemacht.


    mfG Andy

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    ok, habe jetz das programm auf 2 verschiedenen rechnern getestet, aber am selben router und ging immer noch nicht ...
    aber als ich dann die ips abgefragt habe bei wieistmeineip.de, habe ich festgestellt, dass die beiden pcs die gleiche internet ip hatten! is das richtig?
    ok un hier kommt dann der quellcode (den habe ich von der url ganz oben fast übernommen):

    [CODE]

    Der Client:

    Private Sub Client()
    Dim tcpClient As New System.Net.Sockets.TcpClient
    tcpClient.Connect("87.184.142.177", 8006)
    Dim networkStream As NetworkStream = tcpClient.GetStream()
    If networkStream.CanWrite And networkStream.CanRead Then
    ' Do a simple write.
    Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
    networkStream.Write(sendBytes, 0, sendBytes.Length)
    ' Read the NetworkStream into a byte buffer.
    Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
    ' Output the data received from the host to the console.
    Dim returndata As String = Encoding.ASCII.GetString(bytes)
    MsgBox(("Host returned: " + returndata))
    Else
    If Not networkStream.CanRead Then
    MsgBox("cannot not write data to this stream")
    tcpClient.Close()
    Else
    If Not networkStream.CanWrite Then
    MsgBox("cannot read data from this stream")
    tcpClient.Close()
    End If
    End If
    End If


    End Sub

    Server:

    Private Sub Server()
    ' Must listen on correct port- must be same as port client wants to connect on.
    Const portNumber As Integer = 8006

    Dim tcpListener As New TcpListener(portNumber)
    tcpListener.Start()
    MsgBox("Waiting for connection...")
    Try
    'Accept the pending client connection and return 'a TcpClient initialized for communication.
    Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
    MsgBox("Connection accepted.")
    ' Get the stream
    Dim networkStream As NetworkStream = tcpClient.GetStream()
    ' Read the stream into a byte array
    Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
    ' Return the data received from the client to the console.
    Dim clientdata As String = Encoding.ASCII.GetString(bytes)
    MsgBox(("Client sent: " + clientdata))
    Dim responseString As String = "Connected to server."
    Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
    networkStream.Write(sendBytes, 0, sendBytes.Length)
    MsgBox(("Message Sent /> : " + responseString))
    'Any communication with the remote client using the TcpClient can go here.
    'Close TcpListener and TcpClient.
    tcpClient.Close()
    tcpListener.Stop()
    MsgBox("exit")

    Catch e As Exception
    MsgBox(e.ToString())

    End Try