Problem mit der Server IP

  • Wünsche einen guten Abend!

    Volgendes Problem:

    CLIENT:

    [autoit]

    TCPStartup() ; TCP wird initialisiert

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

    $socket = TCPConnect("192.168.178.29", 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab

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

    If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
    EndIf

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

    $sendedBytes = TCPSend($socket, "") ; Sendet den Text an unseren verbundenen Socket

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

    If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
    EndIf

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

    TCPCloseSocket($socket)
    TCPShutdown()

    [/autoit]


    SERVER

    [autoit]

    TCPStartup() ; TCP wird initialisiert

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

    $mainsocket = TCPListen("192.168.178.29", 4321) ; Den mainsocket erstellen

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

    While 1 ; Endlosschleife
    $acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen

    If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
    $receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
    MsgBox(64, "Nachricht empfangen!", "Es wurde eine Nachricht empfangen: " & $receivedData)
    TCPCloseSocket($acceptedSocket)
    EndIf
    WEnd

    [/autoit]


    Mein Problem was ich nicht auf die Reihe bekomme ist, dass ich den Server nicht dazu bringen kann, dass er auf LAN (privates Netzwerk) und Internet horcht..

    Denn ich habe hier einen Router dran zu hängen, wo 3 Rechner drüber laufen.. dann gibts da also einmal die INTERNE IP und die IP über den Router (also IP übers Internet) ...

    Also kurz und knapp:
    wie bringe ich den Server dazu, nicht NUR auf "LAN" -Anfragen zu hören sondern auch auf Internet-Anfragen...
    (also der Befehl : $mainsocket = TCPListen("192.168.178.29", 4321))

    hab ichs verständlich ausgedrückt...??


    Vielen dank für eure antworten...! :)

    2 Mal editiert, zuletzt von Mr_gitarre (30. März 2010 um 21:51)

  • Und wieder rahte ich sinnvollerweise zu einem Sleep! Auch wenns nur ein Sleep(1) ist. Ich sehe soviel Leute die gerne CPU Last verschenken :P

  • Hallo K1773R,

    Und wieder rahte ich sinnvollerweise zu einem Sleep! Auch wenns nur ein Sleep(1) ist. Ich sehe soviel Leute die gerne CPU Last verschenken :P

    sleep(1) gibt es nicht der kürzeste sleepwert ist 10 ms und so wird sleep(1) auch asgeführt, siehe

    [autoit]

    $dif =TimerInit()
    Sleep(1)
    $dif = TimerDiff($dif)
    MsgBox(0,"Unterschied:", $dif & " ms")

    [/autoit]

    mfg (Auto)Bert

  • ok... also sleep irgendwo zwischenknallen... aber wo...?


    und


    Zitat

    Port freigeben heißt das der Router erlaubt das du einen Socket ins Netz erstellen kannst

    bei einem Speedport(Router) würde das so gehen

    Auf https://speedport.ip/ gehen ---> Konfiguration Starten ----> PW eingeben ----> OK ----> an der seite auf Netzwerk ---> Nat & Portregeln ----> Neue Regel difinieren ---> alles ausfüllen ---> Speichern

    Socket??

    also Server... das heißt ich kann momentan keinen Server der das Internet belauscht auf meinem Rechner erstellen... kann ich aber... ich kann nur nich LAN und INTERNET belauschen... gleichzeitig... und das muss man über den Router einstellen??

    dann müsste ich ja auch probleme mit Torrent oder so haben, ODER?

  • Hallo K1773R,

    sleep(1) gibt es nicht der kürzeste sleepwert ist 10 ms und so wird sleep(1) auch asgeführt, siehe

    [autoit]

    $dif =TimerInit()
    Sleep(1)
    $dif = TimerDiff($dif)
    MsgBox(0,"Unterschied:", $dif & " ms")

    [/autoit]

    mfg (Auto)Bert

    Wusst ich garned ^^
    Wiedermal n Bug.

  • Hi,

    so ganz verstehe ich Deine Frage selbst nach dem Durchlesen des Quelltextes nicht.

    wie bringe ich den Server dazu, nicht NUR auf "LAN" -Anfragen zu hören sondern auch auf Internet-Anfragen...

    Warum es bisher bei Dir nicht geklappt hat, ist doch ganz offensichtlich klar. Du benutzt eine FRITZ!Box mit der IP-Adresse 192.168.178.1
    (also der Befehl : $mainsocket = TCPListen("192.168.178.29", 4321)).

    Dein Server hat die IP-Adresse 192.168.178.29 mit dem per NAT freigegebenen Port 4321.
    Da die IP-Adresse 192.168.178.29 eine interne und keine externe Adresse ist, kann der Server nur auf dieser Adresse lauschen.
    Vielleicht nutzt Du den DnyDNS-Service und lässt die Fritzbox am DnyDN-Server anmelden, dann bekommst Du eine Pseudodomain und kannst Deinen Server dann auch auf von außen eingehende Anfragen horchen lassen.

    Gruß

    gnArFl

  • hmmm....

    hab schon eine Adresse bei DYN-Dns..


    dann einfach beim server


    [autoit]

    $mainsocket = TCPListen("Adresse.Dyndns.biz", 4321)).

    [/autoit]


    eingeben??


    und beim Client dann das gleiche, dass er dahin verbinden soll?

    meinst du so??


    ok: weil ich dachte, wenn ich aufm Rechner nen SERVER installiere, muss ich nur dem Clienten sagen, welche Adresse er verbinden soll...

    Da ja 2 Adressen an meinem Computer vergeben sind (also LAN und INTERNET) sollte er doch auf beide anspringen... und dafür gibts keinen Befehl, auf beide adressen anzuspringen??

    dachte ich zumindest... :huh:


    aber geht wohl nich so einfach, ok :S

  • Hallo,

    wenn Du schon eine DnyDNS-Adresse hast, musst Du entweder ein Script auf dem Server ausführen lassen, damit dieser sich mit dem DynDN_Server verbindet.
    Beispiel:
    Du hast die Server-Adresse "meinserver.dyndns.org" und lässt das DynDNS-Anmeldescript auf dem Server beim Rechnerstart ablaufen, dann meldet sich Dein Server mit der IP-Adresse derFRITZ!Box am DynDNS an. Die IP-Adresse der Fritz!Box intern ist immer die 192.168.178.1 extern bekommt sie jedoch bei jeder neuen Einwahl (meistens nachts nach der Zwangstrennung) eine neue IP-Adresse. Hat nun beispielsweise Deine FRITZ!Box die Adresse 89.74.217.132 dann wird diese Adresse beim DynDNS-Service in einer Routing-Tabelle eingetragen und im Abstand von 5 Minuten aktualisiert. Gibt nun jemand aus dem Internet die Adresse "meinserver.dyndns.org" ohne die Anführungszeichen in seinem Browser ein, müsste der Webserver diesen Request abhören können, da die Namensauflösung "meinserver.dyndns.org" <-> 89.74.217.132 durch den DynDNS-Service erfolgt. Eventuell musst Du nun nur noch den Port auf dem der Server lauscht per NAT freigeben, damit die Datenpakete an den Server von der FRITZ!Box durchgelassen werden.

    Viel Erfolg
    Gruß
    gnArFl

  • Sorry, hab da eben was übersehen.

    Wenn Du doch schon eine DynDNS-Adresse hast, dann lass die FRITZ!Box sich doch automatisch beim Neustart der Box anmelden. Dann musst Du nur noch in der FRITZ!Box die NAT-Regel für den Port 4321 freigeben.
    Server sollte dann sowohl von intern als auch von extern ansprechbar sein.

  • ok, probier ich gleich wenn ich zuhause bin...;)


    ... ach verdammt, hab nen ganz anderes Problem:
    folgendes:

    Ich hab ne Fritzbox:

    Jetz hab ich aber an der dran noch 3 weitere Rechner mit jeweils einer INTERNEN IP...
    ich habs versucht mit den Befehlen, die ihr mir gesagt habt doch diese arbeiten immer nur mit der IP der FRITZbox:

    Programm sieht so aus:

    Server:

    [autoit]

    TCPStartup() ; TCP wird initialisiert

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

    $dyn = TCPNameToIP ("NAME.dyndns.biz")

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

    $mainsocket = TCPListen($dyn, 4321) ; Den mainsocket erstellen

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

    While 1 ; Endlosschleife
    $acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen

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

    If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
    $receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
    MsgBox(64, "Nachricht empfangen!", $receivedData)
    TCPCloseSocket($acceptedSocket)
    EndIf
    WEnd

    [/autoit]

    Client:

    [autoit]

    TCPStartup() ; TCP wird initialisiert

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

    $dyn = TCPNameToIP("NAME.dyndns.biz")

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

    $socket = TCPConnect($dyn, 4321) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab

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

    If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
    EndIf

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

    $sendedBytes = TCPSend($socket, "OK") ; Sendet den Text an unseren verbundenen Socket

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

    If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
    EndIf

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

    TCPCloseSocket($socket)
    TCPShutdown()

    [/autoit]


    und aber das Problem ist doch, dass mit der IP der Fritz-box gearbeitet wird, doch woher weiß die denn, an wen der drei rechner sie das weitersenden soll.. an alle drei wird es nicht gesendet, ich habs ausprobiert...!!
    ps: die Ports hab ich geöffnet, für die Fritzbox

    und nen bild welche Ports offen sind
    [Blockierte Grafik: http://s3.directupload.net/images/100330/oiuc8tgq.png]

    3 Mal editiert, zuletzt von Mr_gitarre (30. März 2010 um 21:36)

  • EDIT:

    das problem hat sich gerade gelöst...

    Fehler war, dass ich den SERVER auf die IP des ROUTERS horchen lassen hab, nich auf die INTERNE IP des Computers...

    vielen dank, es funktioniert;)

  • ja ich sehe es erst jetz.

    mit dem Router hat es nix zu tun da du ja server und client auf dem selben pc hast und dafür die selben ips benutz wenn du da nochmal probleme haben solltest schu dir die firewall an vom windows

  • das war nich das problem...

    ich hab den SERVER auf die IP des ROUTERS horchen lassen, das ist FALSCH!!!!

    ich muss ihn auf die Interne IP des Computers, die vom Router zugeordnet worden ist horchen lassen...

    Der Client muss die Router IP bekommen

  • das wäre aber normal auch falsch da das "Server Script"
    Auf Ip des benutzen netzwerkadapters gestartet wird so weit ich informiert bin.
    Aber wenn es geht is es auch egal

  • so als tipp amrande :
    beim server als ip

    [autoit]

    @IPAddress1

    [/autoit]


    so muss man sich nicht die ip merken^^

    [autoit]


    #cs-----------------------------------------------------------------------------
    Hilfe ist immer gut also nimmt sie an ^^
    #ce-----------------------------------------------------------------------------

    [/autoit]