일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 무료 동영상 강의
- 동영상
- 네트워크 프로그래밍
- 실습
- 독립기념관
- 동영상 강의
- 충남 천안
- 클래스 다이어그램
- C++
- 소스 코드
- 언제나휴일
- 표준 라이브러리 함수
- 추천
- c#
- 소켓 통신
- 산책하기 좋은 곳
- 졸업 작품 소재
- 캡슐화
- 안드로이드 앱 개발
- Windows Forms
- c언어
- 원격 제어 프로그램
- 알고리즘
- 언제나 휴일
- 유튜브 동영상 강의
- 프로젝트
- 표준 입출력
- 강의
- 실습으로 다지는 c#
- 파이썬
- Today
- Total
목록소스 코드 (237)
프로그래밍 언어 및 기술 [언제나휴일]
C언어 - 대입, 증감, 기타 연산자 00:14 대입 연산자 01:09 [실습] 대입 연산자 l-value 01:42 [실습] 복합 대입 연산자 02:19 [실습] 대입 연산자 우선 순위 03:27 증감 연산자 03:57 [실습] 증감 연산자 05:15 기타 연산자 05:28 [실습] 콤마 연산자 06:30 [실습] 형 변환 연산자 07:05 [실습] sizeof 연산자 07:45 [실습] 삼항 조건 연산자 35. 대입 연산자 =, +=, -=, *=, /=, %= 등 대입 연산은 변수의 값을 설정할 때 사용하는 연산이죠. 이러한 이유로 대입 연산의 좌항에는 상수 표현은 올 수 없으며 l- value라 불러요. 대입 연산자에는 우항의 값을 좌항에 대입하는 단순 대입 연산과 좌항과 우항의 값을 더하거나 빼..

C언어 - 비트 연산자, 쉬프트 연산자 00:19 비트 연산자 01:22 [실습] 비트 연산자 02:44 xor 연산을 이용한 대칭형 암호화 03:28 [실습] xor 연산을 이용한 대칭형 암호화 05:46 쉬프트 연산자 07:00 [실습] 쉬프트 연산 32. 비트 연산자 & | ^ ~ C언어에서는 비트 단위로 논리 연산을 수행하는 비트 연산을 제공하고 있어요. 비트 연산의 피연산자는 정수 형식이 올 수 있어요. 이항 연산자 &는 비트 단위로 논리곱 연산을 수행하죠. 예를 들어 6&5를 하면 6은 이진수로 110이고 5는 이진수로 101이므로 6&5의 연산 결과는 이진수 100이고 10진수 4예요. 이항 연산자 | 는 비트 단위로 논리합 연산을 수행하죠. 예를 들어 6|5의 연산 결과는 이진수 111 이..

[C언어] 산술, 논리, 비교 연산자 00:19 산술 연산 00:35 [실습] 부호 연산 01:35 [실습] 사칙 연산 04:05 [실습] 나머지 연산 05:32 논리 연산자 05:46 [실습] 논리 연산 07:18 [실습] 논리 연산에서 주의할 점 09:03 비교연산자 09:18 [실습] 비교 연산자 10:01 비교 연신에서 주의할 점 29. 산술 연산자 프로그래밍 언어는 관리해야 할 데이터를 위한 문법도 제공하지만 수행해야 할 코드를 작성하는 문법도 제공하죠. 이번에는 C언어에서 수행할 코드를 작성하는 가장 기본적인 문법인 연산자를 다룰게요. C언어에서는 사칙 연산이나 논리 연산, 비트 연산을 비롯하여 30여 가지의 연산자를 제공하고 있어요. 여러분은 책에 나온 예제 코드를 직접 작성하여 하나 하나 ..

[C언어] Part 6. 정수 형식의 표현 범위와 Overflow 값 잘림 현상 17. 정수 형식의 표현 범위 char 형식과 unsigned char 형식은 정수를 표현할 때도 사용할 수 있다고 했어요. 두 가지 형식 모두 1바이트를 할당하여 256가지의 정수를 표현할 수 있답니다. unsigned char 형식은 부호 없는 정수만 표현하므로 0~0xFF(0~255)까지 표현 가능해요. char 형식은 최상위 비트가 0인 0x00~0x7F(0~127)까지는 부호없는 정수예요. 그리고 최상위 비트가 1인 0x80~0xFF(-128~-1)까지는 부호있는 정수죠. ◈ char 형식과 unsigned char 형식의 표현 범위 확인 #include int main() { char c = 0; unsigned ..

Part 5. 문자 형식과 ASCII 코드 15. ASCII 코드 C언어 - 문자 형식과 ASCII 코드 C언어에서 char 형식은 -128~127까지의 정수를 표현할 수 있는 정수 형식이예요. 형식 이름을 보면 알 수 있듯이 char 형식은 문자를 표현할 때 많이 사용하죠. 미국 표준 기구(ANSI, American National Standards Instutitute)에서는 영문 알파벳과 숫자 문자와 여러 기호를 아스키 코드로 정의했어요. 아스키 코드에는 128개의 문자를 약속하고 있답니다. 최초의 아스키 코드는 하드웨어 사이에서 주고 받는 신호를 약속한 것으로 제어 신호도 포함하고 있어요. char 형식이 8비트(1바이트)죠. 첫번째 비트는 0이고 나머지 비트를 아스키 코드를 이용하여 표현해요. ..

[디딤돌 C언어] Part 2. 첫 번째 프로그램 Hello, World! 6. 첫 번째 프로그램 만들기 이제 처음으로 간단한 프로그램을 만들어 봐요. 프로그램 언어를 공부할 때는 머리로 이해하는 것도 필요하지만 받드시 개발 도구에서 만들어 보는 것이 필요해요. 책의 내용을 머리로 이해했다고 만족하지 마시고 개발도구로 만들어 보세요. 이번에 만들 프로그램은 콘솔 화면에 “Hello, World”를 출력하는 프로그램이예요. 여러분은 이 과정을 통해 개발 도구에서 C언어로 프로그램을 만드는 과정을 익힐 수 있어요. 그리고 C언어의 문법 요소도 간단히 살펴볼 수 있답니다. 여기에서는 Microsoft Visual Studio 2022 개발 도구를 사용할게요. (2023년 12월 26일 현재 동영상에서는 Vis..

1. 개요 및 알고리즘 안녕하세요. 언제나 휴일입니다. 이번에는 원형 큐 중에서 버퍼의 모든 공간을 사용하는 소스 코드입니다. 큐는 자료를 한쪽으로 보관하고 다른쪽에서 꺼내는 FIFO(First In First Out) 방식의 자료구조입니다. 큐에 자료를 보관하는 연산을 PUT 혹은 ENQUEUE라 말하고 꺼내는 연산을 GET 혹은 DEQUEUE라고 말합니다. 그리고 보관할 위치 정보를 rear, 꺼낼 위치 정보를 front라고 말해요. 원형 큐에서는 rear와 front를 다음 위치로 이동할 때 index = (index+1)%QSIZE 로 이동합니다. PUT 연산 IF Queue Is full (꽉차면) Overflow (버퍼오버플로우) Else (꽉차지않을때) Buffer[rear] = data (..

1. 소개 및 알고리즘 안녕하세요. 언제나 휴일이예요. 이번에는 버퍼를 동적으로 생성하는 원형 큐를 살펴보아요. 큐는 자료를 한쪽으로 보관하고 다른쪽에서 꺼내는 FIFO(First In First Out) 방식의 자료구조입니다. 큐에 자료를 보관하는 연산을 PUT 혹은 ENQUEUE라 말하고 꺼내는 연산을 GET 혹은 DEQUEUE라고 말합니다. 그리고 보관할 위치 정보를 rear, 꺼낼 위치 정보를 front라고 말해요. 원형 큐에서는 rear와 front를 다음 위치로 이동할 때 index = (index+1)%QSIZE 로 이동합니다. PUT 연산 IF Queue Is full (꽉차면) Overflow (버퍼오버플로우) Else (꽉차지않을때) Buffer[rear] = data (버퍼의 rear..

1. 개요 및 알고리즘 안녕하세요. 언제나 휴일입니다. 이번에는 버퍼크기가 고정인 원형 큐의 소스 코드입니다. 큐는 자료를 한쪽으로 보관하고 다른쪽에서 꺼내는 FIFO(First In First Out) 방식의 자료구조입니다. 큐에 자료를 보관하는 연산을 PUT 혹은 ENQUEUE라 말하고 꺼내는 연산을 GET 혹은 DEQUEUE라고 말합니다. 그리고 보관할 위치 정보를 rear, 꺼낼 위치 정보를 front라고 말해요. 원형 큐에서는 rear와 front를 다음 위치로 이동할 때 index = (index+1)%QSIZE 로 이동합니다. PUT 연산 IF Queue Is full (꽉차면) Overflow (버퍼오버플로우) Else (꽉차지않을때) Buffer[rear] = data (버퍼의 rear ..

1. 유튜브 동영상 강의 2. 개요 및 알고리즘 안녕하세요. 언제나 휴일입니다. 이번에는 스택(STACK)을 연결리스트로 구현하는 소스 코드입니다. 스택은 자료를 한쪽으로 보관하고 꺼내는 LIFO(Last In First Out) 방식의 자료구조입니다. 스택에 자료를 보관하는 연산을 PUSH라 말하고 꺼내는 연산을 POP이라고 말합니다. 그리고 가장 최근에 보관한 위치 정보를 TOP 혹은 스택 포인터라 말합니다. Push 연산 IF Top> MAX Then (꽉 차면) Overflow (버퍼 오버플로우) Else (꽉 차지 않을 때) Top = Top +1 (Top 위치를 1 증가) Buffer[Top] = data (버퍼의 Top 위치에 data 보관) Pop 연산 IF Top=-1 Then (비었으면..

안녕하세요. 언제나휴일입니다.1. 유튜브 동영상 강의지역 검색 예광탄이전 글에서 경로찾기 프로젝트를 소개하였습니다.경로찾기 프로젝트를 구현하기 위해서는 여러 개의 요소 기술을 사용할 수 있어야 합니다.그 중에 카카오 개발자 센터의 지역 API를 사용하여 검색 질의에 해당하는 지역 정보를 조사할 수 있어야 합니다.이번에는 이를 익히기 위해 지역 검색 예광탄을 만들어 보기로 할게요. (C#, 카카오 개발자센터 – 로컬 API 사용)2. 개발에 필요한 작업카카오 개발자 센터에 내 애플리케이션을 추가합니다.추가할 애플리케이션 정보를 입력합니다.앱 이름과 사업자명은 원하는 명칭을 입력해도 무관합니다.앱 키 중에 REST API키는 지역 검색에서 사용합니다.그리고 다음에 지도 API를 사용할 때 JavaScript..

안녕하세요. 언제나휴일입니다. 1. 유튜브 동영상 강의 마지막 프로젝트로 경로 찾기 Windows Forms 앱입니다. 2. 프로그램 소개 이번에 만들 프로젝트는 C#, Windows Forms(.NET Framework) 으로 만들 것입니다. 어떠한 프로그램을 만들 것인지 동작 화면을 보기로 할게요. 출발지와 목적지를 입력하면 검색 결과를 리스트 박스에 보여줍니다. 출발지와 목적지를 리스트 박스에서 선택한 후 경로 찾기 버튼을 누르면 지도에 경로를 선으로 표시합니다. 그리고 리스트 박스에 경로를 요소로 보여줍니다. 시뮬레이션 버튼을 클릭하면 출발지에서 목적지까지 이동하는 모습을 볼수 있습니다. 3. 지도 HTML 코드 편집 앞에서 작성했던 KakaoMap.html 코드를 추가 편집하기로 할게요. 먼저 ..

1. 공용 라이브러리 제작 1.1 유튜브 동영상 강의 1.2 구현 및 소스 코드 앞에서 P2P 메신저의 숏 메시지와 파일 송수신 부분을 구현했어요. 그리고 .NET 리모팅 서비스 제작 방법도 실습했었죠. 이번에는 P2P 메신저의 인증 서비스 부분을 구현해 볼 거예요. 현재 구현은 P2P에서 사용자가 상대 IP 주소와 포트 정보를 설정하고 있어요. 이 부분을 인증 서비스를 구현하여 상대 ID만 선택하여 메시지와 파일을 전송할 수 있게 할 거예요. 이를 위해 먼저 인증 서비스를 위한 공용 라이브러리를 제작합시다. 프로젝트는 클래스 라이브러리(.NET Framework)로 제작합니다. using System; using System.Collections.Generic; using System.Data; usi..

1. 유튜브 동영상 강의 2. .NET 리모팅이란? .NET 리모팅 기술은 서버 측에 있는 개체를 클라이언트 측에서 마치 자신에게 있는 개체를 사용하는 것처럼 사용할 수 있게 서비스를 하는 기술입니다. .NET 리모팅 서비스를 위해서는 서비스를 제공하는 서버와 서비스를 제공받는 클라이언트가 필요하며 서버 측에서 클라이언트에 제공하는 개체를 정의한 클래스 라이브러리가 필요합니다. 서버 측에서 클라이언트에 제공하는 개체는 MashalByReference에서 파생한 개체로 원격 개체라고 말합니다. 서버 측에서는 채널을 등록하여 원격 개체를 사용할 수 있게 등록합니다. 클라이언트 측에서는 서버 측 채널에 접근하여 원격 개체를 참조하여 사용하는데 클라이언트 측에서 원격 개체를 참조하여 사용할 수 있는 개체를 Pr..

1. 스택 안녕하세요. 언제나 휴일입니다. 이번에 작성할 코드는 버퍼크기를 자동으로 확장하는 스택(STACK) 코드입니다. 두 번째 코드는 버퍼 크기를 자동 확장하고 동적으로 생성한 자료를 보관하는 스택(STACK) 소스 코드입니다. 스택은 자료를 한쪽으로 보관하고 꺼내는 LIFO(Last In First Out) 방식의 자료구조입니다. 스택에 자료를 보관하는 연산을 PUSH라 말하고 꺼내는 연산을 POP이라고 말합니다. 그리고 가장 최근에 보관한 위치 정보를 TOP 혹은 스택 포인터라 말합니다. 2. 알고리즘 Push 연산 IF Top> MAX Then (꽉 차면) Overflow (버퍼 오버플로우) Else (꽉 차지 않을 때) Top = Top +1 (Top 위치를 1 증가) Buffer[Top] ..

1. 유튜브 동영상 강의 안녕하세요. 언제나 휴일에 언휴예요. 이번에는 P2P 메신저의 파일 송수신 기능을 구현할 거예요. 이미 P2P 메신저 – 숏 메시지 송수신 예광탄은 구현했어요. 그리고 P2P 메신저 - 파일 전송 클라이언트와 P2P 메신저 - 파일 수신 서버도 구현했죠. 이번 강의에서는 파일 전송 클라이언트와 파일 수신 서버를 라이브러리를 만들고 이를 참조하여 P2P 메신저에 파일 송수신 기능을 구현할 거예요. 파일 송수신 라이브러리에 사용할 소스 코드는 앞에서 제작한 파일 전송 클라이언트와 파일 수신 서버에 있는 소스 코드를 그대로 사용합니다. 2. 컨트롤 추가 배치 먼저 Form1에 자신의 파일 수신 서버 포트와 전송할 때 상대 파일 수신 포트를 입력할 텍스트 상자를 추가합니다. 그리고 설정..

1. 유튜브 동영상 강의2. 소개이 책에서는 C# 언어로 Windows Forms 응용 프로그램 형태로 원격 제어 프로그램을 만드는 전체 과정을 다루고 있습니다. 여기에서 만드는 원격 제어 프로그램은 P2P 방식으로 제어하는 부분과 제어 당하는 부분을 포함하는 프로그램입니다.프로그램을 시작하면 [그림 1]처럼 원격 제어기 창이 뜨고 제어를 원하는 상대 IP 주소를 입력하여 설정하기 버튼을 클릭합니다.원격 호스트에서는 [그림 2]처럼 원격 제어 요청을 한 컨트롤러의 주소가 보이면서 원격 제어 허용 버튼의 상태를 활성화합니다. 원격 제어 허용 버튼을 누르면 원격 컨트롤러에서 원격 제어를 시작할 수 있습니다.이 프로그램을 만드는 과정에서 여러분께서는 Windows Forms 응용 프로그램을 만드는 방법을 익힐..

1. 유튜브 동영상 강의 2. 작성할 형식 소개 원격 제어 프로그램을 만들기 전에 앞으로 작성할 형식들을 간략하게 소개할게요. MainForm은 프로그램이 시작하면서 뜨는 폼으로 원격 제어를 요청하거나 허용하는 역할을 담당합니다. RemoteClientForm은 원격 제어할 수 있게 원격 컨트롤러에게 원격 호스트의 화면을 보여주기 위한 폼입니다. VirtualCursorForm은 원격 제어 호스트에 프로그램 방식의 인공 커서를 띄워 원격 컨트롤러가 마우스를 사용하여 제어하기 쉽게 시각화하는 폼입니다. Controller는 원격 제어하는 곳에서 이미지 서버를 가동하고 이벤트 전송 클라이언트를 생성하는 역할을 담당합니다. 원격 제어 컨트롤러를 대표하는 클래스로 볼 수 있습니다. Remote는 원격 제어 컨트..

1. 유튜브 동영상 강의 *동영상 강의에서는 Connect 부분을 비동기로 처리하는 BeginConnect를 호출합니다. 그리고 연결 요청 성공과 실패를 처리할 수 있게 이벤트를 추가 정의하였습니다. * 2. 원격 제어 요청 클라이언트 원격 제어를 요청하는 SetupClient 클래스를 구현합시다. SetupClient는 단순히 상대에게 누가 요청하는지 알려주는 역할만 수행할 거예요. 값을 유지할 필요도 없고 개체를 만들 필요도 없는 클래스이므로 정적 클래스로 정의하세요. public static class SetupClient { Setup 클라이언트에서는 원격 제어하고자 하는 상대 IP와 포트 정보를 입력 인자로 받습니다. public static void Setup(string ip, int por..

1. 유튜브 동영상 강의 *동영상 강의에서는 라이브러리로 제작합니다.* 2. 원격 제어 요청 수신 이벤트 원격 제어 요청을 수신하여 수락 혹은 거절하는 SetupServer에서는 상대측에서 원격 제어 요청이 온 시점을 알아야 합니다. 이를 위해 이벤트 처리를 할 수 있게 대리자와 이벤트 인자 형식을 정의합시다. 이벤트 처리에 사용할 인자는 EventArgs 클래스를 기반으로 파생 클래스로 정의하는 것을 권해요. public class RecvRCInfoEventArgs : EventArgs { 누가 요청했는지 접근할 수 있게 IPEndPoint 속성을 제공합시다. public IPEndPoint IPEndPoint { get; 설정자는 내부에서만 접근할 수 있게 private으로 접근 지정하세요. pri..

1. 유튜브 동영상 강의 6. 원격 제어 요청 수신 서버 원격 제어 요청을 수신하는 SetupServer 클래스도 정적 클래스로 정의합시다. public static class SetupServer { 서버 측은 연결 요청을 수신하기 위한 Listening 소켓을 생성하는 부분과 연결 요청을 대기하고 수용하는 부분으로 나눌 수 있습니다. 특히 연결 요청을 대기하고 수용하는 부분은 무한 반복할 것으로 블로킹을 막기 위해 여기에서는 스레드를 사용할게요. Listening 소켓을 멤버로 선언합시다. static Socket lis_sock; //연결 요청 수신 Listening 소켓 무한 대기하는 부분의 스레드를 멤버로 선언합시다. static Thread accept_thread = null; //연결 요청..

1. 유튜브 동영상 강의 2. 원격 제어 – 화면 전송 이번에는 원격 제어를 허용한 호스트의 전체 화면을 제어하는 컨트롤러에게 주기적으로 화면을 전송해야 합니다. 이 부분을 담당하는 ImageClient를 작성합시다. public class ImageClient { 전송에 사용할 소켓을 멤버 필드로 선언하세요. Socket sock; 생성자에서는 이미지를 수신할 컨트롤러의 IP와 포트 번호를 입력 인자로 받습니다. public ImageClient(string ip, int port) { 소켓을 생성하세요. //소켓 생성 sock = new Socket(AddressFamily.InterNetwork, //네트워크 주소 체계 SocketType.Stream,//전송 방식 ProtocolType.Tcp);..

1. 유튜브 동영상 강의 2. 원격 제어 - 화면 수신 이벤트 이미지 수신 서버에서는 이미지를 수신할 때마다 폼에 이를 알려주어야 합니다. 이 부분을 위해 이벤트 처리를 할 것입니다. 먼저 이미지를 수신하였을 때 이벤트를 처리하기 위해 대리자와 이벤트 인자 클래스를 정의합시다. RecvImageEventArgs 이름의 클래스를 추가하세요. public class RecvImageEventArgs : EventArgs { 상대 IPEndPoint를 가져오기 할 수 있는 속성을 제공합시다. public IPEndPoint IPEndPoint { get; private set; } 상대측 IP 주소 개체와 IP 주소 문자열과 포트 정보를 가져오기 할 수 있는 속성도 제공합시다. public IPAddress ..

1. 유튜브 동영상 강의 2. 원격 제어 – 화면 수신 서버 원격 제어 컨트롤러는 원격 제어 호스트의 화면을 주기적으로 수신하여 이를 보면서 제어합니다. 이제 원격 제어 화면을 수신하는 ImageServer 클래스를 구현합시다. public class ImageServer { 먼저 Listen 소켓과 연결 요청을 대기하고 수용하는 부분을 위한 스레드를 멤버로 선언합시다. Socket lis_sock; //Listening 소켓 Thread accept_thread = null; 이미지를 수신할 때 이벤트 처리를 위해 RecvImageEventHandler 형식의 이벤트를 선언합시다. public event RecvImageEventHandler RecvedImage = null; 생성자에서는 IP와 포트..

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 단말을 멤버 필드로 선언하세요. IPE..

1. 유튜브 동영상 강의 2. 원격 제어 이벤트 수신 버퍼 분석 메시지를 수신하는 서버에서는 수신한 버퍼의 내용을 분석하는 부분이 필요합니다. 여기에서는 Meta 클래스를 정의하여 분석한 정보를 표현합시다. public class Meta { 수신한 메시지 종류를 속성으로 제공합시다. public MsgType Mt { get; private set; } 누르거나 뗀 키를 속성으로 제공합시다. public int Key { get; private set; } 마우스 좌표를 속성으로 제공합시다. public Point Now { get; private set; } 생성자는 수신한 버퍼를 입력 인자로 받습니다. public Meta(byte[] data) { 메시지 종류를 설정하세요. Mt = (MsgTyp..

1. 유튜브 동영상 강의 원격 제어 이벤트 수신 이벤트 인자 클래스 구현 2. 원격 제어 이벤트 수신 이벤트 원격 제어 이벤트를 수신하였을 때 이를 통보하기 위한 RecvMEEventArgs 클래스를 추가하세요. public class RecvKMEEventArgs : EventArgs { 수신한 메시지를 분석한 Meta 개체를 속성으로 제공합시다. public Meta Meta { get; private set; } 사용하기 편하게 Meta의 각 속성을 빠르게 접근할 수 있는 속성을 제공합시다. public int Key { get { return Meta.Key; } } public Point Now { get { return Meta.Now; } } public MsgType MT { get { r..

1. 유튜브 동영상 강의 원격 제어 프로그램 - 원격 제어 이벤트 수신 서버 2. 원격 제어 이벤트 수신 서버 원격 제어 컨트롤러에서 제어하기 위해 키보드와 마우스 이벤트를 원격 제어 호스트에서 전송합니다. 이를 위해 원격 제어 호스트에서는 이러한 키보드, 마우스 이벤트를 수신하기 위한 서버가 필요합니다. 이제 원격 제어 이벤트 수신 서버를 표현할 RecvEventServer 클래스를 정의합시다. public class RecvEventServer { 서버의 Listen 소켓을 멤버로 선언합니다. Socket lis_sock; 메시지를 수신하였을 때 처리를 위해 이벤트를 멤버로 선언합니다. public event RecvKMEEventHandler RecvedKMEvent = null; 클라이언트의 연결..

1. 유튜브 동영상 강의원격 제어 프로그램 - 키보드, 마우스 이벤트 래퍼2. 키보드, 마우스 이벤트 래퍼원격 제어 호스트에서는 수신한 키보드와 마우스 이벤트를 프로그램 방식으로 발생해 주어야 합니다. 이를 위해 Windows API에서 제공하는 기능을 래핑하여 클래스로 구현합시다.키보드 이벤트나 마우스 이벤트를 강제로 발생하기 위해서는 Windows API에서 제공하는 시스템 함수를 호출해야 합니다. 다음은 프로그램 방식으로 키보드 이벤트를 발생시키는 keybd_event 함수의 원형입니다.WINUSERAPI VOID WINAPI keybd_event( __in BYTE bVk, __in BYTE bScan,__in DWORD dwFlags,__in ULONG_PTR dwExtraInfo);C#에서..

1. 유튜브 동영상 강의 원격 제어 프로그램 - 가상 커서 원격 제어 컨트롤러에서는 상대 호스트의 마우스 위치를 화면에 표시해야 합니다. 이 부분을 위해 가상의 커서를 만듭시다. 가상 커서는 도구 스타일의 작은 폼으로 정의합시다. VirtualCursorForm 이름의 폼을 추가하세요. Form의 AutoSizeMode를 GrowAndShrink로 설정하세요. BackColor는 Red, FormBorderSytle은 None, TopMost를 True로 지정합니다. Size 속성과 MaximumSize, MinimumSize 속성을 10, 10으로 지정하세요. 폼의 Load 이벤트 핸들러를 등록하세요. 폼이나 컨트롤의 이벤트 핸들러를 등록할 때는 속성 창을 이용하여 등록하세요. Load 이벤트 핸들러에..