UDP-Pakete senden und empfangen

  • Und wieder ne frage:

    Im Beispiel von AUtoit findet man nen Rohbau vom Server und Client...

    Von den Beiden Beispielen hab ich mir einfach die While schleife genommen und sie vertauscht...
    (Somit sendet der Server und hört der Client zu)

    Doch es geht nicht..

    Liegt es daran, dass ich was falsch gemacht habe?? Oder müsste man wieder ne Neue verbindung, Vom Server ausgehend, aufbauen... Woduch der SERVER ja kein SERVER mehr ist...

    Denk mal drüber nach...:)

    Hier der Code, über den ich rede:

    Client

    [autoit]

    ; ; Dies ist der UDP Client
    ; ; Startet zuerst den Server

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

    ; Start des UDP-Dienstes
    ;==============================================
    UDPStartup()

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

    ; Registriert die Cleanup Funktion.
    OnAutoItExitRegister("Cleanup")

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

    ; Öffnet einen "SOCKET"
    ;==============================================
    $socket = UDPOpen("192.168.178.33", 65532)
    If @error <> 0 Then Exit

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

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

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

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

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

    Server:

    [autoit]

    ; ; Dies ist der UDP Server
    ; ; Startet diesen hier zuerst

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

    ; Start des UDP-Dienstes
    ;==============================================
    UDPStartup()

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

    ; Registriert die Cleanup Funktion.
    OnAutoItExitRegister("Cleanup")

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

    ; "Bind" zu einem Anschluss ("Socket") durchführen
    ;==============================================
    $socket = UDPBind("192.168.178.33", 65532)
    If @error <> 0 Then Exit

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

    $n=0
    While 1
    Sleep(2000)
    $n = $n + 1
    $status = UDPSend($socket, "Nachricht Nr." & $n)
    If $status = 0 then
    MsgBox(0, "FEHLER", "Fehler während des Sendens der UDP-Nachricht: " & @error)
    Exit
    EndIf
    WEnd

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

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

    [/autoit]

    Danke für jede Antwort! :rock::rock:

  • ok....

    Also hab ich recht mit der annahme, dass man dann wieder ne neue Verbindung aufbauen muss?

  • Wenn du schon die Rollen tauschen willst, solltest du jeweils das komplette Skript der Hilfe einfach unter dem anderen Namen abspeichern,

    denn für UDPSend muss vorher das Socket mit UDPOpen geöffnet werden, du bindest aber mit UDPBind einen Socket an eine eingehende Verbindung. Bei UDPRecv muss mit UDPBind ein Socket an eine eingehende Verbindung gebunden werden, aber du öffnest das Socket mit UDPOpen.

    mfg autoBert

  • Hi,
    da bei UPD nicht die IP des Absenders mitgesendet wird ist es unmöglich für den Server dem Clienten zu Antworten.
    Außer du lässt bei Server sowie Client einen Socket erzeugen und dann verbinden, aber das ist nunmal nicht die feine art ;). Nimm lieber TCP.