Функция UDPSend

         Описание функции


UDPSend

Высылает данные открытому сокету

UDPSend ( socketarray, data )

Параметры

socketarray Основной сокет/массив возвращаемый функцией UDPOpen.
data бинарные данные, либо строка высылаемая подключенному сокету

Возвращаемое значение

Успех:Возвращает количество байт отправленное открытому сокету.
Ошибка:Устанавливает @error.
@error:-1, -2 или -3 не верный socketarray.
1 Неверный IP-адрес.
2 Неверный порт.
Возвращает значения windows API WSAGetError (смотрите MSDN).

См. также

UDPOpen, UDPBind, UDPRecv

Пример

#include <GUIConstantsEx.au3>

; Сначала нажмите "1. Запуск сервера", потом запустите копию этого скрипта нажмите "2. Запуск клиента".

Example()

Func Example()
    UDPStartup() ; Запуск UDP служб.

    ; Регистрация функции OnAutoItExit для остановки служб при завершении скрипта.
    OnAutoItExitRegister("OnAutoItExit")

    ; Установка IP-адреса и порта
    Local $sIPAddress = "127.0.0.1" ; Этот IP-адрес работает только для теста на вашем компьютере.
    Local $iPort = 65432 ; Порт, используемый для соединения.

    #region GUI
    Local $hGUI = GUICreate("UDPSend", 150, 85)

    Local $iBtnServer = GUICtrlCreateButton("1. Запуск сервера", 10, 10, 130, 27)

    Local $iBtnClient = GUICtrlCreateButton("2. Запуск клиента", 10, 45, 130, 27)

    GUISetState(@SW_SHOW, $hGUI)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $iBtnClient
                GUISetState(@SW_DISABLE, $hGUI)
                _UDPSend_Client($sIPAddress, $iPort)
                GUISetState(@SW_ENABLE, $hGUI)
            Case $iBtnServer
                GUISetState(@SW_DISABLE, $hGUI)
                _UDPSend_Server($sIPAddress, $iPort)
                GUISetState(@SW_ENABLE, $hGUI)
        EndSwitch

        Sleep(10)
    WEnd

    GUIDelete($hGUI)
    #endregion GUI
EndFunc   ;==>Example

Func _UDPSend_Client($sIPAddress, $iPort)
    ; Подключает прослушивание сокета, указанного IP-адреса и порта.
    Local $iError = @error
    Local $aSocket = UDPOpen($sIPAddress, $iPort)

    If @error Then ; Если ошибка, то выход
        MsgBox(4096 + 16, "", "Клиент:" & @LF & "Не удалось подключиться, @error = " & @error)
        Return False
    EndIf

    ; Высылает строку "tata" серверу.
    UDPSend($aSocket, "tata")

    If @error Then ; Если ошибка, то выход
        MsgBox(4096 + 16, "", "Клиент:" & @LF & "Не удалось выслать данные, @error = " & @error)
        Return False
    EndIf

    UDPCloseSocket($aSocket) ; Закрывает сокет
EndFunc   ;==>_UDPSend_Client

Func _UDPSend_Server($sIPAddress, $iPort)
    ; Создает сокет связанный с указанным IP-адресом и портом
    Local $aSocket = UDPBind($sIPAddress, $iPort)

    If @error Then ; Если ошибка, то выход
        ; Кто-то возможно уже связан с этим IP-адресом и портом (ещё одна копия скрипта уже выполняется?).
        MsgBox(4096 + 16, "", "Сервер:" & @LF & "Не удалось связать, @error = " & @error)
        Return False
    EndIf
   
    Local $sReceived

    Do
        ; Ожидаем строку "tata" или "toto" (пример скрипта в UDPRecv): 4 байта длиной.
        $sReceived = UDPRecv($aSocket, 4)
    Until $sReceived <> ""

    ; Примечания: Если вы не знаете, какой длины будут данные, то используйте, например 2048 в параметре maxlen и вызывайте функцию UDPRecv, пока не получите ничего или ошибку.

    MsgBox(4096, "", "Сервер:" & @LF & "Получено: " & $sReceived)

    UDPCloseSocket($aSocket) ; Закрывает сокет
EndFunc   ;==>_UDPSend_Server

Func OnAutoItExit()
    UDPShutdown() ; Останавливает UDP службу.
EndFunc   ;==>OnAutoItExit