개발 관련/SW, App 관련
Autoit의 통신(UDP)으로 이용하기
소서리스25
2023. 6. 29. 20:46
반응형
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", 385, 200);
$Button1 = GUICtrlCreateButton("Note", 32, 112, 145, 65);
$Button2 = GUICtrlCreateButton("Calc", 216, 112, 145, 65);
$DebugText = GUICtrlCreateLabel("Debug Text : ", 32, 16, 220, 20);
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 |
처리 또한 지난번 보다 더 단순하게 진행된다.
물론 받은 결과를 처리하여 직접적으로 다시 서버로 결과를 보내줘도 된다.
또한 단방향으로 진행되기 때문에 서버를 먼저 가동할 필요 없이 따로따로 실행해도 통신으로 데이터를 전달한다.
반응형