Frage zu TCP und UDP

  • Hallo,

    ich versuche schon seit Wochen mit Autoit übers Internet mit einem anderen Pc zu connecten per TCP.

    so sieht mein Script aus:

    [autoit]

    ;SERVER!! Start Me First !!!!!!!!!!!!!!!
    $g_IP = "85.244.478.12"

    [/autoit][autoit][/autoit][autoit]

    ; Start The TCP Services
    ;==============================================
    TCPStartUp()

    [/autoit][autoit][/autoit][autoit]

    ; Create a Listening "SOCKET"
    ;==============================================
    $MainSocket = TCPListen($g_IP, 5190, 100 )
    ;~ If $MainSocket = -1 Then Exit

    [/autoit][autoit][/autoit][autoit]

    ; look for client connection
    ;--------------------
    While 1
    $ConnectedSocket = TCPAccept( $MainSocket)
    If $ConnectedSocket >= 0 Then
    msgbox(0,"","my server - Client Connected")
    exit
    EndIf
    Wend

    [/autoit]

    Aber es connectet leider nicht mit diesem script hier:

    [autoit]

    ;CLIENT!!!!!!!! Start SERVER First... dummy!!
    $g_IP = "80.455.45.456"

    [/autoit][autoit][/autoit][autoit]

    ; Start The TCP Services
    ;==============================================
    TCPStartUp()

    [/autoit][autoit][/autoit][autoit]

    ; Connect to a Listening "SOCKET"
    ;==============================================
    $socket = TCPConnect( $g_IP, 5190 )
    ;~ If $socket = -1 Then Exit

    [/autoit]

    Was mach ich den falsch :(

    und geht das auch mit udp?

  • Zitat

    $g_IP = "80.455.45.456"


    überprüfe erstmal Deine IP-Adressen.
    Damit wirst Du nicht weit kommen :)

    siehe auch: http://de.wikipedia.org/wiki/IP-Adresse

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • also soweit ich weiß, kannst Du bei einer FritzBox PortForwarding nur an explizite IP-Adressen eintragen.
    D.h. Du Musst in Deiner FritzBox für den PC der dahinter "sitzt" eine feste IP-Adresse vergeben
    und dem entsprechend den Port 5190 an diese IP-Adresse forwarden.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ich würde mal sagen "Andere Anwendung" auswählen , dem Port einen Namen geben, Port angeben und die IP-Adresse des Ziel-Rechners.
    Ansonsten im Handbuch von Fritz nachsehen 8)

    Edit:
    http://www.avm.de/de/Service/Han…x_Fon_WLAN_7050

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Also soweit ich weiß muss:
    - beim Server die IP-Adresse die LAN-Ip genommen werden ( TCPListen( 'LanIp', 'Port' ) )
    - beim Server im Router der Port auf genau die Lan-Ip weitergeleitet werden
    - der Client zum Connecten die WAN-Ip des Servers nehmen

    da hab ich auch ewig dran rumprobiert, aber so müsste das passen =)

    mfg limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Also hier komt meine adresse rein richtig?

    [autoit]

    ;SERVER!! Start Me First !!!!!!!!!!!!!!!
    $g_IP = "Meine ip"

    [/autoit][autoit][/autoit][autoit]

    ; Start The TCP Services
    ;==============================================
    TCPStartUp()

    [/autoit][autoit][/autoit][autoit]

    ; Create a Listening "SOCKET"
    ;==============================================
    $MainSocket = TCPListen($g_IP, 5190, 100 )
    ;~ If $MainSocket = -1 Then Exit

    [/autoit][autoit][/autoit][autoit]

    ; look for client connection
    ;--------------------
    While 1
    $ConnectedSocket = TCPAccept( $MainSocket)
    If $ConnectedSocket >= 0 Then
    msgbox(0,"","my server - Client Connected")
    exit
    EndIf
    Wend

    [/autoit]

    und hier des anderen?

    [autoit]

    CLIENT!!!!!!!! Start SERVER First... dummy!!
    $g_IP = "des anderen"

    [/autoit][autoit][/autoit][autoit]

    ; Start The TCP Services
    ;==============================================
    TCPStartUp()

    [/autoit][autoit][/autoit][autoit]

    ; Connect to a Listening "SOCKET"
    ;==============================================
    $socket = TCPConnect( $g_IP, 5190 )
    ;~ If $socket = -1 Then Exit

    [/autoit]
  • also ich würde sagen, bei Deinem Server kommt als Listen Adresse deine lokale IP-Adresse rein.
    Deine WAN-Adresse wird von Deiner FritzBox ja nicht weiter gereicht, sondern da läuft alles über NAT.
    Also: Server IP= z.B 192.168.0.2 ( FritzBox z.B. 192.168.0.1)
    inkl. Portforwarding in derFritzbox des Ports 5910 auf die IP 192.168.0.2

    Der Client muß Deine WAN-IpAdresse eintragen. Das ist die Adresse, die Dir von Deinem Provider zugewiesen wird.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Brauch ich ja nix weiter zu sagen,
    Die Lan-Ip kannste auch per @IpAddress1 (evtl auch @IpAddress2, 3 oder 4),
    die Wan-Ip per _GetIp()
    kriegen.

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Server:
    ServerSkript: @IPAddress1 / Deine LAN IP
    Firewall: Portfreigabe für Port ;)
    Router (FritzBox): Internet -> Portfreigabe -> Neu -> Aktiv für andere Anwendungen -> LAN-IP und Port eintragen
    MessageBox mit _GetIP() -> für Client

    Client:
    Skript: Connect to: IP aus MsgBox :) (Und gewählter Portt ;) )

  • Ähhm, Helpfile???

    TCPRecv
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    ;==============================================
    ;==============================================
    ;SERVER!! Start Me First !!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================

    [/autoit] [autoit][/autoit] [autoit]

    InputBox("IP für Client","IP kopieren und im Client eingeben",_GetIP())
    ; Set Some reusable info
    ; Set your Public IP address (@IPAddress1) here.
    ; Global $szServerPC = @ComputerName
    ; Global $szIPADDRESS = TCPNameToIP($szServerPC)
    Global $szIPADDRESS = @IPAddress1 ; <====== DEINE LAN-IP
    Global $nPORT = 33891 ; <====== DEIN PORT

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
    Local $msg, $recv

    [/autoit] [autoit][/autoit] [autoit]

    ; Start The TCP Services
    ;==============================================
    TCPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    ; Create a Listening "SOCKET".
    ; Using your IP Address and Port 33891.
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

    [/autoit] [autoit][/autoit] [autoit]

    ; If the Socket creation fails, exit.
    If $MainSocket = -1 Then Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Create a GUI for messages
    ;==============================================
    $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200)
    $edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Initialize a variable to represent a connection
    ;==============================================
    $ConnectedSocket = -1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Wait for and Accept a connection
    ;==============================================
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Get IP of client connecting
    $szIP_Accepted = SocketToIP($ConnectedSocket)

    [/autoit] [autoit][/autoit] [autoit]

    ; GUI Message Loop
    ;==============================================
    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    ; GUI Closed
    ;--------------------
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    ; Try to receive (up to) 2048 bytes
    ;----------------------------------------------------------------
    $recv = TCPRecv($ConnectedSocket, 2048)

    [/autoit] [autoit][/autoit] [autoit]

    ; If the receive failed with @error then the socket has disconnected
    ;----------------------------------------------------------------
    If @error Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    ; Update the edit control with what we have received
    ;----------------------------------------------------------------
    If $recv <> "" Then GUICtrlSetData($edit, _
    $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)

    [/autoit] [autoit][/autoit] [autoit]

    TCPShutdown()
    EndFunc ;==>Example

    [/autoit] [autoit][/autoit] [autoit]

    ; Function to return IP Address from a connected socket.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

    [/autoit] [autoit][/autoit] [autoit]

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "ptr", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $sockaddr = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit]
    TCPSend
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    ;==============================================
    ;==============================================
    ;CLIENT! Start Me after starting the SERVER!!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
    Global $szIPADDRESS = InputBox("Server IP","IP aus dem Server einfügen und OK") ; <================= _GetIP vom Server
    Global $nPORT = 33891 ; <========== PORT

    [/autoit] [autoit][/autoit] [autoit]

    Example()

    [/autoit] [autoit][/autoit] [autoit]

    Func Example()
    ; Set Some reusable info
    ;--------------------------
    Local $ConnectedSocket, $szData

    [/autoit] [autoit][/autoit] [autoit]

    ; Start The TCP Services
    ;==============================================
    TCPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialize a variable to represent a connection
    ;==============================================
    $ConnectedSocket = -1

    [/autoit] [autoit][/autoit] [autoit]

    ;Attempt to connect to SERVER at its IP and PORT 33891
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

    [/autoit] [autoit][/autoit] [autoit]

    ; If there is an error... show it
    If @error Then
    MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
    ; If there is no error loop an inputbox for data
    ; to send to the SERVER.
    Else
    ;Loop forever asking for data to send to the SERVER
    While 1
    ; InputBox for data to transmit
    $szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:")

    [/autoit] [autoit][/autoit] [autoit]

    ; If they cancel the InputBox or leave it blank we exit our forever loop
    If @error Or $szData = "" Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    ; We should have data in $szData... lets attempt to send it through our connected socket.
    TCPSend($ConnectedSocket, $szData)

    [/autoit] [autoit][/autoit] [autoit]

    ; If the send failed with @error then the socket has disconnected
    ;----------------------------------------------------------------
    If @error Then ExitLoop
    WEnd
    EndIf
    EndFunc ;==>Example

    [/autoit]