UDP Problem

  • Ich habe herausgefunden dass wenn man UDP benutzt dass man dann nur auf

    [autoit]

    UDPOpen

    [/autoit][autoit]

    UDPSend

    [/autoit]

    anwenden kann

    und auf

    [autoit]

    UDPBind

    [/autoit]


    nur

    [autoit]

    UDPRecv

    [/autoit]


    anwenden kann ...
    Stimm das oder mache ich was falsch weil dann müsste ja Client und Server den Port freigegeben haben was natürlich unpraktisch wäre und ich mir nicht denken kann ..

  • Ich versteh nicht ganz was du meinst... Natürlich muss für UDP, genau wie für TCP, der Port freigegeben sein... Aber das ist doch nicht dein Problem, oder? UDP muss mit UDPStartup gestartet werden...

    Edit: Meinst du, das man für das Empfangen von Daten UDPBind und für das Senden UDPOpen verwenden muss? Das ist glaub ich schon richtig, kann mich aber natürlich auch irren ^^

    Edit2: Anscheinend hab ich mich auch geirrt :whistling:

    • Offizieller Beitrag

    Hallo

    Sollte beides für beides gehen.
    Hier mal, quick'n'dirty, ein abgeändertes Beispiel von der Hilfe:
    Server:

    Spoiler anzeigen
    [autoit]

    ;;This is the UDP Server
    ;;Start this first

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

    ; Start The UDP Services
    ;==============================================
    UDPStartup()

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

    ; Bind to a SOCKET
    ;==============================================
    $socket = UDPBind("127.0.0.1", 65532)
    If @error <> 0 Then Exit

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

    While 1
    $data = UDPRecv($socket, 50)
    If $data <> "" Then
    UDPSend($socket,"test")
    MsgBox(0, "UDP DATA", $data, 1)
    EndIf
    sleep(100)
    WEnd

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

    Func OnAutoItExit()
    UDPCloseSocket($socket)
    UDPShutdown()
    EndFunc

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit]

    ;;This is the UDP Client
    ;;Start the server first

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

    ; Start The UDP Services
    ;==============================================
    UDPStartup()

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

    ; Open a "SOCKET"
    ;==============================================
    $socket = UDPOpen("127.0.0.1", 65532)
    If @error <> 0 Then Exit

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

    ;~ $n=0
    ;~ While 1
    ;~ Sleep(2000)
    ;~ $n = $n + 1
    $status = UDPSend($socket, "Message #")
    If $status = 0 then
    MsgBox(0, "ERROR", "Error while sending UDP message: " & @error)
    Exit
    EndIf
    ;~ WEnd

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

    While 1
    $data = UDPRecv($socket, 50)
    If $data <> "" Then
    UDPSend($socket,"test")
    MsgBox(0, "UDP DATA", $data, 1)
    EndIf
    sleep(100)
    WEnd

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

    Func OnAutoItExit()
    UDPCloseSocket($socket)
    UDPShutdown()
    EndFunc

    [/autoit]

    Mfg Spider

  • bei mir funktioniert das Skript nicht ganz ... ändere ich z.B. beim Client den Text auf "Hallo" dann kommt aber kein Hallo beim anderen an es ist sehr komisch und mittlerweile versteh ich fast garnichts mehr ;(

  • Ja dann funktioniert es aber er zeigt immer nur das an was im Server steht das ist ja das Problem ;( Also es funktioniert auch nicht dass UDPRecv und UDPSend auf den gleichen Socket anwendbar sind oder aufjedenfall bei mir nicht ;(

    Edit : Zitat aus der Hilfe : Gibt ein Array zurück: $array[1] enthält den realen Anschluss (Socket), $array[2] enthält die angegebene IP-Adresse und $array[3] enthält den Port. Man benötigt diese Information in nachfolgenden Aufrufen für UDPSend(), für die man diese Socket Struktur/Array übergeben muss.

    Einmal editiert, zuletzt von nof@ker2 (16. Oktober 2009 um 22:30)

  • Du siehst das vollkommen richtig. Anders als bei TCP brauchst du bei UDP auf beiden Seiten einen Server und einen Clienten !

  • Hi,
    UDP in der "einfachen" Ausführung ist aber auch nicht dafür gedacht, den 100%igen Empfang der gesendeten Daten beim Empfänger zu gewährleisten! Verlorengegangene Pakete werden anders als bei TCP auch nicht wieder angefordert, ausserdem muss bei dem Empfänger die Reihenfolge der empfangenen Daten nicht unbedingt so sein wie sie abgeschickt wurden....für Anwendungen wie Sprachübertragungen z.B. ist das alles völlig schnurz, da kommts nur auf den "Speed" an, minimale Fehler bei der Übertragung sind unerheblich.
    Andy

  • Hilft auch nicht ;( Hab Firewall ausgemacht aber es klappt immernoch nicht ;( Wenn ich hingegen einén Bind und einen Open erstelle funktioniert es ...
    Hoffe mir kann jemand helfen ;) ^^