일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 실습으로 다지는 c#
- 유튜브 동영상 강의
- 클래스 다이어그램
- 파이썬
- 산책하기 좋은 곳
- 표준 입출력
- 동영상 강의
- 졸업 작품
- 네트워크 프로그래밍
- C++
- 동영상
- 추천
- 충남 천안
- 원격 제어 프로그램
- c언어
- 안드로이드 앱 개발
- 실습
- 소스 코드
- 강의
- 언제나 휴일
- 소켓 통신
- 알고리즘
- 무료 동영상 강의
- 언제나휴일
- 프로젝트
- 졸업 작품 소재
- Windows Forms
- 캡슐화
- 표준 라이브러리 함수
- c#
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C#] 원격 제어 프로그램 10. 원격 제어 이벤트 전송 클라이언트 본문
1. 유튜브 동영상 강의
2. 원격 제어 이벤트 전송 클라이언트
이제 원격 제어 컨트롤러에서 발생하는 키보드와 마우스 이벤트를 전송하는 SendEventClient 클래스를 구현합시다.
전송하고 수신할 메시지 종류를 열거형으로 정의합시다.
public enum MsgType//원격 제어 이벤트 종류
{
MT_KDOWN = 1, MT_KEYUP, MT_M_LEFTDOWN,
MT_M_LEFTUP, MT_M_RIGHTUP, MT_M_RIGHTDOWN,
MT_M_MIDDLEDOWN, MT_M_MIDDLEUP, MT_M_MOVE
}
이벤트를 전송하는 SendEventClient를 작성합시다.
public class SendEventClient
{
원격 제어 호스트의 IP 단말을 멤버 필드로 선언하세요.
IPEndPoint ep;
생성자에서는 상대측 IP와 포트를 입력인자로 받아서 IPEndPoint 개체를 생성합니다.
public SendEventClient(string ip, int port)
{
//원격 제어 호스트 IP 단말 개체 생성
ep = new IPEndPoint(IPAddress.Parse(ip), port);
}
키를 누른 메시지를 전송하는 메서드를 구현합시다.
public void SendKeyDown(int key)
{
이 프로그램에서 키보드와 마우스 이벤트 정보 중에 제일 큰 크기는 마우스 이동 이벤트입니다. 이벤트 종류 1바이트, x좌표 4바이트, y좌표 4바이트로 총 9바이트가 필요합니다.
여기에서는 고정 길이로 보낼 것이어서 9바이트의 버퍼를 생성합니다.
byte[] data = new byte[9];
맨 처음 바이트는 이벤트 종류입니다. 여기에서는 키 누름 이벤트로 설정합니다.
data[0] = (byte)MsgType.MT_KDOWN;//키 누름 이벤트 설정
누른 키를 버퍼에 복사하세요.
Array.Copy(BitConverter.GetBytes(key), 0, data, 1, 4);//누른 키를 버퍼에 복사
그리고 버퍼를 전송하세요.
SendData(data);//버퍼 전송
}
이벤트 버퍼를 전송하는 SendData 메서드를 구현합시다.
private void SendData(byte[] data)
{
소켓을 생성하세요.
//소켓 생성
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
원격 제어 호스트와 연결하세요.
sock.Connect(ep);//원격 제어 호스트에 연결
이벤트 버퍼를 전송합니다.
sock.Send(data); //이벤트 전송
전송 후에 소켓을 닫습니다.
sock.Close(); //소켓 닫기
}
이 프로그램에서는 키보드와 마우스 이벤트가 발생할 때마다 원격 제어 호스트의 이벤트 수신 서버에 연결하여 전송하고 닫는 것을 반복할 거예요.
키를 떼었을 때 이벤트를 전송하는 SendKeyUp 메서드를 구현합시다.
public void SendKeyUp(int key)
{
메시지를 보낼 버퍼를 생성하세요.
byte[] data = new byte[9];
키를 뗌 이벤트를 설정하세요.
data[0] = (byte)MsgType.MT_KEYUP;//키 뗌 이벤트 설정
어느 키를 뗀 것인지 버퍼에 복사하세요.
Array.Copy(BitConverter.GetBytes(key), 0, data, 1, 4); //뗀 키를 버퍼에 복사
버퍼를 전송합니다.
SendData(data);//버퍼 전송
}
마우스 누름 이벤트를 전송하는 SendMouseDown 메서드를 구현합시다.
public void SendMouseDown(MouseButtons mouseButtons)
{
메시지를 보낼 버퍼를 생성하세요.
byte[] data = new byte[9];
마우스 버튼에 따라 메시지 종류를 결정하세요.
switch (mouseButtons)//마우스 버튼에 따라 메시지 종류 결정
{
case MouseButtons.Left: data[0] = (byte)MsgType.MT_M_LEFTDOWN; break;
case MouseButtons.Right: data[0] = (byte)MsgType.MT_M_RIGHTDOWN; break;
case MouseButtons.Middle: data[0] = (byte)MsgType.MT_M_MIDDLEDOWN; break;
}
메시지를 전송합니다.
SendData(data);//마우스 누름 이벤트 전송
}
마우스 뗌 이벤트를 전송하는 SendMouseUp 메서드를 구현합시다.
public void SendMouseUp(MouseButtons mouseButtons)
{
메시지를 보낼 버퍼를 생성하세요.
byte[] data = new byte[9];
마우스 버튼에 따라 메시지 종류를 결정하세요.
switch (mouseButtons) //마우스 버튼에 따라 메시지 종류 결정
{
case MouseButtons.Left: data[0] = (byte)MsgType.MT_M_LEFTUP; break;
case MouseButtons.Right: data[0] = (byte)MsgType.MT_M_RIGHTUP; break;
case MouseButtons.Middle: data[0] = (byte)MsgType.MT_M_MIDDLEUP; break;
}
메시지를 전송합니다.
SendData(data);//마우스 뗌 이벤트 전송
}
마우스 이동 이벤트를 전송하는 SendMouseMove 메서드를 구현합시다.
public void SendMouseMove(int x, int y)
{
메시지를 보낼 버퍼를 생성하세요.
byte[] data = new byte[9];
마우스 이동 이벤트를 설정하세요.
data[0] = (byte)MsgType.MT_M_MOVE;//마우스 이동 이벤트 설정
마우스의 x, y 좌표를 복사하세요.
Array.Copy(BitConverter.GetBytes(x), 0, data, 1, 4); //x좌표 복사
Array.Copy(BitConverter.GetBytes(y), 0, data, 5, 4); //y좌표 복사
메시지를 전송합니다.
SendData(data); //마우스 이동 이벤트 전송
}
}
다음은 이번 실습에서 작성한 소스 코드입니다.
//SendEventClient.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
namespace 원격제어기
{
/// <summary>
/// 원격 제어 이벤트 종류 열거형
/// </summary>
public enum MsgType
{
MT_KDOWN = 1, MT_KEYUP, MT_M_LEFTDOWN,
MT_M_LEFTUP, MT_M_RIGHTUP, MT_M_RIGHTDOWN,
MT_M_MIDDLEDOWN, MT_M_MIDDLEUP, MT_M_MOVE
}
/// <summary>
/// 원격 제어 이벤트 전송 클라이언트 클래스
/// </summary>
public class SendEventClient
{
IPEndPoint ep;
/// <summary>
/// 생성자
/// </summary>
/// <param name="ip">원격지 호스트 IP</param>
/// <param name="port">포트</param>
public SendEventClient(string ip, int port)
{
//원격 제어 호스트 IP 단말 개체 생성
ep = new IPEndPoint(IPAddress.Parse(ip), port);
}
/// <summary>
/// 키 누름 이벤트 전송 메서드
/// </summary>
/// <param name="key">누른 키</param>
public void SendKeyDown(int key)
{
byte[] data = new byte[9];
data[0] = (byte)MsgType.MT_KDOWN;//키 누름 이벤트 설정
Array.Copy(BitConverter.GetBytes(key), 0, data, 1, 4);//누른 키를 버퍼에 복사
SendData(data);//버퍼 전송
}
private void SendData(byte[] data)
{
//소켓 생성
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
sock.Connect(ep);//원격 제어 호스트에 연결
sock.Send(data); //이벤트 전송
sock.Close(); //소켓 닫기
}
/// <summary>
/// 키 뗌 이벤트 전송 메서드
/// </summary>
/// <param name="key">뗀 키</param>
public void SendKeyUp(int key)
{
byte[] data = new byte[9];
data[0] = (byte)MsgType.MT_KEYUP;//키 뗌 이벤트 설정
Array.Copy(BitConverter.GetBytes(key), 0, data, 1, 4); //뗀 키를 버퍼에 복사
SendData(data);//버퍼 전송
}
/// <summary>
/// 마우스 누름 이벤트 전송 메서드
/// </summary>
/// <param name="mouseButtons">누른 마우스 버튼</param>
public void SendMouseDown(MouseButtons mouseButtons)
{
byte[] data = new byte[9];
switch (mouseButtons)//마우스 버튼에 따라 메시지 종류 결정
{
case MouseButtons.Left: data[0] = (byte)MsgType.MT_M_LEFTDOWN; break;
case MouseButtons.Right: data[0] = (byte)MsgType.MT_M_RIGHTDOWN; break;
case MouseButtons.Middle: data[0] = (byte)MsgType.MT_M_MIDDLEDOWN; break;
}
SendData(data);//마우스 누름 이벤트 전송
}
/// <summary>
/// 마우스 뗌 이벤트 전송 메서드
/// </summary>
/// <param name="mouseButtons">뗀 마우스 버튼</param>
public void SendMouseUp(MouseButtons mouseButtons)
{
byte[] data = new byte[9];
switch (mouseButtons) //마우스 버튼에 따라 메시지 종류 결정
{
case MouseButtons.Left: data[0] = (byte)MsgType.MT_M_LEFTUP; break;
case MouseButtons.Right: data[0] = (byte)MsgType.MT_M_RIGHTUP; break;
case MouseButtons.Middle: data[0] = (byte)MsgType.MT_M_MIDDLEUP; break;
}
SendData(data);//마우스 뗌 이벤트 전송
}
/// <summary>
/// 마우스 이동 메서드
/// </summary>
/// <param name="x">마우스 x좌표</param>
/// <param name="y">마우스 y좌표</param>
public void SendMouseMove(int x, int y)
{
byte[] data = new byte[9];
data[0] = (byte)MsgType.MT_M_MOVE;//마우스 이동 이벤트 설정
Array.Copy(BitConverter.GetBytes(x), 0, data, 1, 4); //x좌표 복사
Array.Copy(BitConverter.GetBytes(y), 0, data, 5, 4); //y좌표 복사
SendData(data); //마우스 이동 이벤트 전송
}
}
}
'프로젝트 > C# 원격제어 프로그램' 카테고리의 다른 글
[C#] 원격 제어 프로그램 6. 원격 제어 요청 수신 서버 (0) | 2024.01.08 |
---|---|
[C#] 원격 제어 프로그램 7. 원격 제어 – 화면 전송 (0) | 2024.01.08 |
[C#] 원격 제어 프로그램 8. 원격 제어 – 화면 수신 이벤트 (1) | 2024.01.08 |
[C#] 원격 제어 프로그램 9. 원격 제어 – 화면 수신 서버 (0) | 2024.01.08 |
[C#] 원격 제어 프로그램 11. 원격 제어 이벤트 수신 버퍼 분석 (0) | 2024.01.08 |
[C#] 원격 제어 프로그램 12. 원격 제어 이벤트 수신 이벤트 (0) | 2024.01.08 |
[C#] 원격 제어 프로그램 13. 원격 제어 이벤트 수신 서버 (1) | 2024.01.08 |
[C#] 원격 제어 프로그램 14. 원격 제어 컨트롤러 (0) | 2024.01.08 |