언제나휴일 50

[C++] 19. 특별한 멤버 this

[C++] 특별한 멤버 this 개체의 메서드에서는 특별한 키워드 this를 사용할 수 있어요. this는 컴파일러에 의해 자동으로 캡슐화하는 정적 멤버입니다. this 키워드는 개체 자신을 나타내며 클래스 형식의 포인터입니다. this 키워드를 통해 접근할 수 있는 것은 클래스에 캡슐화한 멤버입니다. 따라서 멤버 필드와 지역 변수와 같은 이름이어도 this 키워드로 접근하면 멤버 필드를 접근합니다. 참고로 전역 변수와 지역 변수, 멤버 필드의 이름이 같을 때 전역 변수는 스코프 연산자(::)와 함께 사용할 수 있고 멤버 필드는 this 키워드와 함께 사용할 수 있습니다. 지역 변수는 변수명만 가지고 접근할 수 있죠. 물론 이름이 다르다면 스코프 연산자(::)나 this를 굳이 사용할 필요는 없어요. /..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 1. 소개[언제나 WPF]

유튜브 동영상 강의 번역 나래이터 만들기 프로젝트 소개 00;00 인사 00:26 개발할 번역 나래이터 프로그램 시연 02:38 정의해야 할 형식들 소개 03:00 제작할 WrapkakoLib 라이브러리 소개 04:15 제작할 WrapSpeechLib 라이브러리 소개 안녕하세요. 언제나 휴일에 언휴예요. 이번에는 Kakao 번역 API와 .NET 음성 Speech 기술을 Mash up해 볼게요. 두 개의 기술 모두 사용하는 것은 크게 어렵지 않습니다. 그리고 최근에 응용이나 앱, 웹에서는 이러한 것을 지원하려고 노력하는 것 같네요. 실제 해당 기술을 사용해 본 적이 있다면 프로그램 제작에 걸리는 시간은 1시간~2시간 정도입니다. 여기에서는 이러한 기술을 경험해 보려는 이들을 위해 기술별로 제작해 나갈게요..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 2. 번역 라이브러리 만들기[C#]

유튜브 동영상 강의 [WPF] 번역 나래이터 - 번역 라이브러리 만들기 KakaoTransApi 소스 코드 using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Web.Script.Serialization; namespace WrapKakaoLib { /// /// 언어 정보 열거형 /// public enum LanguageInfo { kr, en, jp, cn, vi, id, ar, bn, de, es, fr, hi, it, ms, nl, pt, ru, th, tr, MAX_LI } /// /// 카카오 음성 API - 정적 클래스 /// public..

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 4. 최종 번역 나래이터 구현[ WPF]

유튜브 동영상 강의 번역 나래이터 구현 화면 배치 MainWindow.xaml.cs 소스 코드 using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using WrapKakaoLib; using WrapSpeechLib; namespace 번역_나래이터_v0._1 { /// /// MainWindow.xaml에 대한 상호 작용 논리 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btn_speek_Click(object sender, RoutedEventArgs ..

[C++] 1. 들어가기에 앞서 2. C++ 언어 소개 및 책의 기술 범위

C++ 언어 소개 1. 들어가기에 앞서 이 책은 C언어를 학습한 이들을 이가 C++언어를 학습하기 위해 작성하였습니다. C++언어는 C언어와 변수나 연산, 함수 등의 기본 문법은 비슷하지만 클래스와 템플릿 문법을 있습니다. 특히 C++ 언어에서 클래스는 OOP(Object Oriented Programming, 개체(혹은 객체) 지향 프로그래밍) 방식으로 프로그래밍할 수 있게 새롭게 추가한 문법이죠. 이러한 특징으로 인해 C언어와 C++은 접근 방식에서 많은 차이를 갖고 있습니다. 이 책은 C++입문자를 위한 책이지만 단순히 C++문법을 다루고 있는 책은 아니예요. 오히려 C++에 새롭게 추가한 문법을 OOP에 어떻게 활용하는지에 관한 부분이 많습니다. 이를 위해 문법 외에도 OOP의 특징과 OOP 프로..

정리하기 (연산자)

1. 다음리터럴상수로초기값을설정하는선언문중에서오류가있는것을고르시오. a. char c = “hello”; b. int i = ‘a’; c. char c = 38; d. char c = 0xC; 더보기 답: a “hello”는 문자열이며 char 형식을 원소로 하는 배열이나 포인터 형식 변수로 사용할 수 있습니다. 2. 다음코드를수행했을때출력결과를예측하시오. printf(“%d\n”, 8^8); 더보기 답: ^ 연산은 비트 자리별로 같으면 0이고 다르면 1로 계산하는 연산입니다. 좌항과 우항이 같은 수이므로 모든 자리는 같으며 따라서 결과도 모든 자리가 0입니다. 3. 다음코드를수행했을때출력결과를예측하시오. printf(“%d\n”, 2

Part 9. 산술, 논리, 비교 연산자

[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여 가지의 연산자를 제공하고 있어요. 여러분은 책에 나온 예제 코드를 직접 작성하여 하나 하나 ..

명명법과 형식 정리하기

21. 명명법 C언어에서는 변수 이름, 함수 이름, 사용자 정의 형식의 태그 이름 등을 개발자가 정할 수 있어요. C언어에서는 개발자가 정하는 이름은 다음 규칙을 따라야 하죠. 예약어를 사용할 수 없음 첫 문자로 숫자 문자를 사용할 수 없음 언더 바를 제외한 기호 문자를 사용할 수 없음 같은 블록 내에 같은 이름을 선언할 수 없음 참고로 예전에는 한글로 이름을 정할 수 없었는데 지금은 한글로 정할 수 있어요. 프로그래밍을 할 때 이름을 대충 정하면 생각이 나지 않아 확인하는 비용도 들어요. 여러 개발자가 같이 개발할 때는 이러한 문제로 예상하지 못한 비용이 추가로 발생하곤 하죠. 많은 개발자들은 서로 이해하기 쉽게 나름의 규칙을 정하여 이름을 결정하고 있어요. 이 책에서는 다음과 같은 규칙으로 이름을 결..

Part 7. 실수 표현과 메모리 구조

C언어 - 실수 표현과 메모리 구조 19. 실수는 근사치 0.1에서 0.5사이에 몇 개의 실수가 있을까요?\ 여러분이 아는 것처럼 무한 개의 실수가 존재하죠. 따라서 0.1과 0.5 사이의 모든 실수를 유한한 메모리에 표현할 수 없어요. 실제로 컴퓨터에서 실수 표현은 오차 범위 내에서 값을 표현하는 근사치예요. C언어에서는 실수 형식으로 float 형식과 double 형식을 제공해요. float 형식은 4바이트이며 double 형식은 8바이트예요. 그리고 C언어에서 실수 표현은 기본적으로 double 형식으로 취급하며 float 형식을 표현할 때는 뒤에 f를 붙여요. 그렇지만 C언어에서 실수 형식 사이에는 서로 묵시적 형변환을 제공해서 실수 뒤에 f를 붙이지 않아도 가능하답니다. 물론 값 잘림 현상이 발..

Part 6. 정수 형식의 표현 범위와 Overflow 값 잘림 현상

[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 코드

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

원형 큐 - 버퍼의 모든 공간 사용

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. 유튜브 동영상 강의 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 (비었으면..

2. 지역 검색 예광탄 [경로찾기 프로젝트 – C#, 카카오 지도 API, SK TMAP API 활용 ]

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

OpenAPI/C# OpenAPI 2024.01.09

3. 지역 검색 및 위치 확인 [경로찾기 프로젝트 – C#, 카카오 지도 API, SK TMAP API 활용 ]

안녕하세요. 언제나휴일입니다. 1. 유튜브 동영상 강의 2. 프로젝트 소개 및 요구 기술 이번에는 지역 검색 및 위치 확인 앱 개발입니다. 지역 검색한 후에 검색 결과를 선택하면 지도에 Center를 이동시키고 마커를 보여주는 프로그램입니다. 이 프로젝트는 C#, Windows Form(.NET Framework) 앱으로 개발합니다. 지역 검색은 카카오 개발자 센터 로컬 REST API를 사용합니다. 지도는 카카오 개발자 센터의 지도 API를 사용합니다. 지도는 웹 에 게시해야 하는데 여기에서는 IIS에 게시하는 것으로 할게요. 3. 컨트롤 배치 먼저 C#, Windows Forms 앱(.NET Framework) 프로젝트를 생성합니다. Form1.cs를 MainForm.cs 로 파일명을 변경할게요.(무..

OpenAPI/C# OpenAPI 2024.01.09

4. 경로 탐색 [경로찾기 프로젝트 – C#, 카카오 지도 API, SK TMAP API 활용 ]

안녕하세요. 언제나휴일입니다. 1. 유튜브 동영상 강의 [C#] 경로 탐색 - 카카오 지역 API + SK TMAP API 앞에서 지역 검색 예광탄에서는 카카오 개발자 센터 로컬 API를 사용했습니다. 지역 검색 및 위치 확인에서는 카카오 개발자 센터 로컬 API와 지도 API를 사용했습니다. 이번에는 경로 탐색 프로그램을 제작할 것입니다. 경로 탐색 프로그램은 카카오 개발자 센터 로컬 API와 SK TMap API를 사용합니다. 동영상 강의는 언제나 휴일 유튜브에 업로드하였습니다. 2. 제작할 프로그램 소개 경로 탐색은 C#, 콘솔 (.NET Framework) 프로젝트입니다. 프로그램을 시작하면서 출발지를 입력합니다. 카카오 개발자 센터 로컬 REST API를 이용하여 검색한 내용을 출력하면 사용자가..

OpenAPI/C# OpenAPI 2024.01.09

.NET 리모팅 [C#]

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

[C#] 원격 제어 프로그램 1. 개요

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

[C#] 원격 제어 프로그램 2. 원격 제어에서 작성할 형식 소개

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

[C#] 원격 제어 프로그램 3. 프로젝트 생성 및 MainForm 자식 컨트롤 배치

1. 유튜브 동영상 강의 2. 프로젝트 생성 및 MainForm 자식 컨트롤 배치 먼저 윈도우즈 Forms 응용 프로젝트 템플릿을 선택하여 프로젝트를 생성하세요. 프로젝트 이름은 원격 제어기로 할게요. 기본으로 제공하는 Form1.cs의 이름을 솔루션 창에서 이름 바꾸기를 하여 MainForm.cs로 변경하세요. 솔루션 창에서 폼의 이름을 바꾸면 마법사에 의해 소스 코드의 클래스 이름도 자동으로 변환해 줍니다. 그리고 MainForm에 자식 컨트롤을 배치하세요. 먼저 MainForm의 캡션을 표시하기 위해 Text 속성을 원격 제어기로 설정하세요. [그림 6]에 표시한 것처럼 다른 컨트롤의 Name 속성과 Text 속성을 설정하세요. 원격 제어 요청한 호스트의 IP 주소를 표시할 텍스트 상자인 tbox_..

[C#] 원격 제어 프로그램 4. 원격 제어 요청 클라이언트

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

[C#] 원격 제어 프로그램 5. 원격 제어 요청 수신 이벤트

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

[C#] 원격 제어 프로그램 6. 원격 제어 요청 수신 서버

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

[C#] 원격 제어 프로그램 7. 원격 제어 – 화면 전송

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

[C#] 원격 제어 프로그램 8. 원격 제어 – 화면 수신 이벤트

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

[C#] 원격 제어 프로그램 9. 원격 제어 – 화면 수신 서버

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

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

카테고리 없음 2024.01.08

[C#] 원격 제어 프로그램 11. 원격 제어 이벤트 수신 버퍼 분석

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..

[C#] 원격 제어 프로그램 12. 원격 제어 이벤트 수신 이벤트

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..