Autoit의 통신(TCP/IP) 이용 원격제어 2/2
Autoit의 통신(TCP/IP) 이용 원격제어 코드 내용
지난번 포스트에 이어 이번에는 몇 가지 중요 코드 설명과 제대로 동작하는지 영상으로 확인해 보고자 한다.
코드는 지난번에 포스팅한 내용을 참고하면 되며 그중에서 먼저 다음과 같이 서버 측 코드를 살펴보자
1
2
3
4
5
6
7
8
9
10
11
12
|
$serverIP = @IPAddress1;
$clientIP = "192.168.200.49";
$nPort = 5538;
GUICtrlSetData($DebugText, "log : Waiting..");
$ConnectedSocket = -1;
$ConnectedSocket_Rev = -1;
TCPStartUp();
$MainSocket = TCPListen($serverIP , $nPort);
|
cs |
여기 1 ~ 2번째 줄은 현재 서버가 될 이 PC의 IP 주소와 전달받을 클라이언트의 IP 주소이다.
그리고3번째 줄은 포트번호이다. 이 번호는 통신 주소 간에 동일해야 한다.
7~8번은 수신데이터 값을 초기화하는 것으로 보면 된다.(사실 없어도 되긴 하다)
10, 12번 줄은 메인소켓으로 TCP/IP 통신 시작이며 현재의 IP주소로 수신하겠다고 설정하며 데이터가 들어오기를 대기한다고 보면 되겠다.
그러면 초기화 및 기본적인 설정과 통신 준비가 끝나고 대기 상태가 되었다.
수신 대기는 계속되어야 하므로 반복문으로 보면 되겠다.
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
|
While 1
$ConnectedSocket_Rev = TCPAccept($MainSocket)
If $ConnectedSocket_Rev <> -1 Then
$recv = TCPRecv($ConnectedSocket_Rev, 2048)
If $recv <> -1 Then
GUICtrlSetData($DebugText, "log : "&$recv);
EndIf
EndIf
If @error Then
MsgBox(4112, "오류", "Error : "&@error, 5)
ExitLoop
EndIf
$nMsg = GUIGetMsg();
Switch $nMsg;
Case $GUI_EVENT_CLOSE
_Exit();
Case $Button1
$ConnectedSocket = TCPConnect($clientIP, $nPort);
TCPSend($ConnectedSocket, "note");
ConsoleWrite("note"&@CRLF);
Case $Button2
$ConnectedSocket = TCPConnect($clientIP, $nPort);
TCPSend($ConnectedSocket, "calc");
ConsoleWrite("calc"&@CRLF);
EndSwitch
sleep(2)
WEnd
|
cs |
이번에는 반복문이다.
2번 줄이 TCP로 들어오는 것을 수신 역할 한다고 보면 될 것이다.
서버가 먼저 실행되고 클라이언트를 실행할 때 먼저 여기에서 클라이언트의 접속 상태를 수신하게 되어 있다. 이때 2번 줄에 해당(4 ~ 14번 줄) 항목이 먼저 처리한다. 오류가 없는지 이상유무도 함께 처리한다.
반복문이기 때문에 수신되는 항목을 sleep(2)로 0.002초마다 처리한다고 보면 될 것 같다.
연결엔 문제가 없다면 수신 및 송신의 대기 상태로 있다가 GUI의 버튼에 의해 해당 원격으로 요청할 것을 전송하며 이상이 있을 경우 메시지로 오류 사항을 표시하고 반복문은 종료된다.
이 전송을 처리하는 것이 22~23번 줄이다. 위에서 설정한 클라이언트 IP주소로 송신한다.
그러면 다음으로 클라이언트 측 코드를 살펴보면 사실 통신을 주고받는 형태는 같으므로 다른 사항을 살펴보면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
TCPSend($ConnectedSocket, "Connection is alive..");
while 1
$ConnectedSocket_Rev = TCPAccept($MainSocket);
If $ConnectedSocket_Rev <> -1 Then
$recv = TCPRecv($ConnectedSocket_Rev, 2048);
If $recv <> -1 Then
if($recv == "note") Then
Run("notepad.exe");
ElseIf($recv == "calc") Then
Run("calc.exe");
ElseIf($recv == "exit") Then
_Exit();
EndIf
EndIf
EndIf
sleep(2);
WEnd
|
cs |
1번째 줄이 클라이언트가 실행될 때 연결 상태를 확인하고자 서버 측에 송신하는 내용이다. 서버에서 해당 내용을 수신하여 화면에 표시된다면 통신 송수신 상태가 잘 되었다는 것을 의미한다.
5~21번 줄이 수신되었을 때 null 값(autoit에서는 -1)이나 빈값이 아닐 경우 해당 내용을 처리한다.
서버로부터 수신된 값이 "note"나 "calc"이면 해당 run을 통해 소프트웨어를 실행한다.
대략적인 설명은 이쯤 해서 하고 잘 실행되는지 아래 영상을 확인해 보자.
확인은 데스크탑 PC와 노트북간에 내부 네트워크로 진행하였다. 그리고 실행하기에 앞서 서버와 클라이언트 간 IP 주소가 잘 맞는지 재확인하자.
음.. 잘되는군..