sind sockets doch nicht bidrektional?

  • Hallo,

    ich versuche gerade zum 1. mal, direkt mit Socket zu arbeiten. eigentlich nutze ich nur Fetzen aus den Beispielen. laut Wikipedia sind Sockets ja bidirektional - also will ich erreichen, dass Client einmal an den Server sendet und dann anders herum. die eine richtung klappt auch wunderbar, nur der Server antwortet an sich selbst
    Server:

    [autoit]

    $socket = UDPBind($g_IP, 65432)
    If @error <> 0 Then Exit
    While 1
    $data = UDPRecv($socket, 50)
    If $data <> "" Then
    MsgBox(0, "UDP DATA Server", $data)
    UDPSend($socket, "blub")
    $data = ""
    EndIf
    Sleep(100)
    WEnd

    [/autoit]

    Client:

    [autoit]

    $socket = UDPOpen($g_IP, 65432)
    If @error <> 0 Then Exit
    UDPSend($socket, "bla")

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

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

    [/autoit]

    EDIT: Interessant ist auch, dass meine Firewall diese Verbindung nicht anzeigt?!

    Einmal editiert, zuletzt von dietrich4564 (28. November 2011 um 00:51)

  • jop, ist gestartet (fehlt in dem Auszug, aber ist vorhanden - sonst würde es ja gar nicht gehen).
    Der Link hilft leider nicht wirklich weiter, denn dort wird nur vom Client zum Server geschickt - genau das klappt ja bereits. Da aber ein Socket bidirektional sein soll, müsste man ja auf dem gleichen Kanal zurücksenden können.... (was eine Forwarding-Konfiguration auf dem Client unnötig macht....). [Sonst müsste ich für die Nachricht vom Server zum Client einen Port auf Clientseite öffnen, zu dem sich der Server verbindet, weshalb ein Forwarding im Router nötig wäre]

    Ob TCP oder UDP macht lokal nicht wirklich einen Unterschied, ich will es ja erstmal nur zum laufen bekommen :)

    Einmal editiert, zuletzt von dietrich4564 (28. November 2011 um 14:28)

  • Edit: bisschen verkürzt...

    [autoit]


    ;;;;;;;;;;;;
    ;; Server ;;
    ;;;;;;;;;;;;
    OnAutoItExitRegister("_exit")
    UDPStartup()

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

    Global Const $g_IP = @IPAddress1

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

    $aServerSocket = UDPBind($g_IP, 65432) ;gibt ein Array zurück: [1] real socket, [2] local IP, [3] Port
    If @error <> 0 Then Exit
    While 1
    $aData = UDPRecv($aServerSocket, 50, 2) ;gibt ein Array zurück: [0] data, [1] from IP, [2] from Port
    If $aData <> "" Then
    Local $aClientArray[4] = [$aServerSocket[0], $aServerSocket[1], $aData[1], $aData[2]]

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

    MsgBox(0, "UDP DATA Server", $aData[0])

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

    UDPSend($aClientArray, 'Server->Client')

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

    EndIf
    Sleep(100)
    WEnd

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

    Func _exit()
    UDPShutdown()
    EndFunc

    [/autoit]
    Zitat

    You just keep on trying 'till you run out of cake. ;)


    [STEAM] Source UDF

    3 Mal editiert, zuletzt von K4z (2. Dezember 2011 um 13:46)