개발 관련/SW, App 관련

Autoit의 통신(UDP)으로 이용하기

by 소서리스25 2023. 6. 29.
반응형

Autoit의 통신(UDP) 원격 제어

 

지난번에는 Autoit의 TCP/IP를 다루었는데, 사실 사용한 것은 이번에 할 UDP 통신과 별 다를 바 없는 형태로 진행했었다.

조금 더 해당 통신에 가깝게 한다면 서버와 클라이언트를 연결하고 실제 데이터만 주고받아야만 한다. 중간에 다시 IP를 설정하거나 할 필요가 없다.

 

이번 UDP의 경우 앞의 TCP/IP보다는 조금은 단순하다. 

각각의 가장 큰 다른 점 한 가지는 양방향 통신과 단방향 통신 정도로 보면 될 것 같다. TCP/IP는 양방향, 그리고 UDP는 단방향으로 수신의 결과를 확인이 되지 않는 것이 UDP로 보면 될 것 같다.

쉽게 설명하면 서버에서 데이터를 보냈는데 클라이언트에서는 보냈는지 안 보냈는지 알 수 없는 것, 반대로 서버에서는 클라이언트에서 받았는지 안 받았는지 알 수 없다는 것... 즉, 문제가 있음을 즉각적으로 알 수 없다는 것...

 

UDP 통신이라도 역시 서버와 클라이언트로 나뉜다.

통신을 받아 원격을 실행하는 서버 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <GUIConstantsEx.au3>
 
HotKeySet("{ESC}""_Exit");
 
Global $Form1, $Button1, $Button2, $DebugText, $nMsg;
 
#Region ### START Koda GUI section ###
$Form1 = GUICreate("UDP Test"385200);
$Button1 = GUICtrlCreateButton("Note"3211214565);
$Button2 = GUICtrlCreateButton("Calc"21611214565);
$DebugText = GUICtrlCreateLabel("Debug Text : "321622020);
GUISetState(@SW_SHOW);
#EndRegion ### END Koda GUI section ###
 
$connectIP = "192.168.200.54";
$nPort = 5538;
 
UDPStartup()
 
$socket = UDPOpen($connectIP, $nPort);
If @error <> 0 Then Exit;
 
While 1
    If @error Then
        MsgBox(4112"Error""Error : " & @error, 5);
        _Exit();
    EndIf
 
    $nMsg = GUIGetMsg();
    Switch $nMsg;
        Case $GUI_EVENT_CLOSE
            _Exit();
 
        Case $Button1
            UDPSend($socket, "note");
            ConsoleWrite("note"&@CRLF);
 
        Case $Button2
            UDPSend($socket, "calc");
            ConsoleWrite("calc"&@CRLF);
    EndSwitch;
 
    sleep(100);
WEnd
 
Func _Exit()
    UDPCloseSocket($socket);*
    UDPShutdown();
    Exit;
EndFunc
cs

 

불필요한 것을 줄인것도 있겠지만 이전보다 더 단순해졌다.

 

원격을 요청하는 클라이언트 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
HotKeySet("{ESC}""_Exit");
 
$connectIP = "192.168.200.54";
$nPort = 5538;
 
UDPStartup()
 
$socket = UDPBind($connectIP, $nPort)
If @error <> 0 Then
    MsgBox(0"Error""Error : " & @error, 3);
    Exit;
EndIf
 
While 1
    $recv = UDPRecv($socket, 50)
 
    if($recv == "note"Then
        Run("notepad.exe");
    ElseIf($recv == "calc"Then
        Run("calc.exe");
    ElseIf($recv == "exit"Then
        _Exit();
    EndIf
 
    sleep(100)
WEnd
 
Func _Exit();
    UDPCloseSocket($socket)
    UDPShutdown()
    Exit;
EndFunc
cs

 

처리 또한 지난번 보다 더 단순하게 진행된다.

물론 받은 결과를 처리하여 직접적으로 다시 서버로 결과를 보내줘도 된다. 

또한 단방향으로 진행되기 때문에 서버를 먼저 가동할 필요 없이 따로따로 실행해도 통신으로 데이터를 전달한다.

반응형

댓글