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