소켓 통신 24

.NET 리모팅 [C#]

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

P2P 메신저 – 파일 송수신 기능 구현 [C#]

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

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

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

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

[C#] 원격 제어 프로그램 14. 원격 제어 컨트롤러

1. 유튜브 동영상 강의 원격 제어 프로그램 - 원격 제어 컨트롤러 2. 원격 제어 컨트롤러 이제 원격 제어 컨트롤러를 만들어 봅시다. 먼저 공통으로 사용할 부분을 작성할게요. public static class NetworkInfo { 이미지 서버 포트 접근자를 제공합시다. 여기에서 하드 코딩할게요. public static short ImgPort //이미지 서버 포트 { get { return 20004; } } 원격 제어 요청 포트 접근자를 제공합시다. public static short SetupPort//원격 제어 요청 포트 { get { return 20002; } } 이벤트 서버 포트 접근자를 제공합시다. public static short EventPort//이벤트 서버 포트 { get ..

[C#] 원격 제어 프로그램 15. 키보드, 마우스 이벤트 래퍼

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#] 원격 제어 프로그램 16. 원격 제어 호스트

1. 유튜브 동영상 강의 원격 제어 프로그램 - 원격 제어 호스트 2. 원격 제어 호스트 이제 원격 제어 호스트를 표현할 Remote 클래스를 구현해 봅시다. public class Remote { 원격 제어 호스트 개체도 프로그램에 유일해야 하므로 단일체 패턴을 적용할게요. 먼저 클래스 내에 정적 멤버 필드로 단일 개체를 선언하세요. static Remote singleton;//단일 개체 다른 형식에서 단일 개체를 가져오기 할 수 있게 속성을 제공하세요. public static Remote Singleton { get { return singleton; } } 단일 개체는 정적 생성자에서 생성하세요. static Remote() { singleton = new Remote(); //단일 개체 생성 ..

[C#] 원격 제어 프로그램 17. 가상 커서

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

[C#] 원격 제어 프로그램 18. 원격 클라이언트 폼

1. 유튜브 동영상 강의 원격 제어 프로그램 - 원격 클라이언트 폼 2. 원격 클라이언트 폼 이번에는 원격 제어할 때 대상 호스트의 화면을 표시하는 RemoteCleintForm 폼을 추가하세요. 자식 컨트롤로 PictureBox 컨트롤을 추가하고 이름을 pbox_remote으로 정합시다. PictureBox 컨트롤의 Dock 속성을 Fill로 설정하고 SizeMode 속성르 StretchImage로 설정하세요. 멤버 필드로 이미지를 수신하였는지 확인하는 멤버와 이미지 크기를 기억할 멤버를 선언하세요. bool check;//이미지 수신 여부 Size csize; //클라이언트 폼 크기 원격 호스트를 제어하기 위한 키보드와 마우스 이벤트를 전송에 사용할 클라이언트를 속성으로 제공합시다. SendEvent..

[C#] 원격 제어 프로그램 19. MainForm

1. 유튜브 동영상 강의 원격 제어 프로그램 - 마지막 강의 2. MainForm 가상 커서와 원격 제어 화면과 상대 IP와 포트를 멤버를 선언합니다. string sip; //상대 IP int sport; //상대 port RemoteCleintForm rcf = null;//원격 호스트 화면(제어 화면) VirtualCursorForm vcf = null;//가상 커서 속성 창을 이용해서 Load 이벤트 핸들러를 등록하세요. private void MainForm_Load(object sender, EventArgs e) { 가상 커서 폼과 원격 제어 호스트 화면을 표시할 폼을 생성합니다. vcf = new VirtualCursorForm(); //가상 커서 생성 rcf = new RemoteClei..

[C#] 원격 제어 프로그램 - 보너스 트랙 2. 오토 키보드 구현

1. 유튜브 동영상 강의 오토 키보드 구현 C#에서 Win32 API 사용 2. 오토 키보드 구현 안녕하세요. 언제나 휴일에 언휴예요. 현재 원격제어 프로그램 프로젝트에서 이미지를 송수신하는 부분까지 구현하였습니다. 이제 프로그램 방식으로 키보드와 이벤트를 발생시켜 제어하는 부분으로 넘어갈 단계입니다. 키보드와 마우스 이벤트 발생하면 이 정보를 전송하는 부분과 이를 수신하는 부분을 구현해야겠죠.. 그리고 수신한 곳에서는 프로그램 방식으로 키보드와 마우스 이벤트를 발생시켜야 합니다. 흔히 오토 마우스, 오토 키보드라고 말하는 프로그램에 사용하는 기술이죠. 그런데 키보드와 마우스 이벤트를 발생하는 것은 Win32 API에서 제공하고 있어요. 이를 이용하기 위해 마이그레이션을 할 거예요. 이 부분을 미리 학습..

[C#] 원격 제어 프로그램 - 보너스 트랙 3. 키보드 마우스 이벤트 송수신

1. 유튜브 동영상 강의 원격 제어 프로그램 - 키보드 마우스 이벤트 송수신 2. 키보드 마우스 이벤트 송수신 원격제어 프로그램 만들기에서 키보드와 마우스 이벤트 전송에 관해 구현한 것을 라이브러리로 만드는 실습을 합니다. 이를 참조하여 키보드와 마우스 이벤트를 전송하는 클라이언트 응용을 만듭니다. 또한 이를 수신하는 서버 응용을 만듭니다. 이를 통해 키보드와 마우스 이벤트 관련 라이브러리 제작에 문제가 있는지 테스트합니다. 원격 제어 프로그램 만들기 과정에서 중간에 테스트를 하기 위한 부분입니다. 동영상 강의를 참고하세요.

P2P 메신저 - 파일 수신 서버 구현 [C#]

1. 유튜브 동영상 강의 이번 강의는 파일 수신 서버 구현 실습이예요. 이전 글(P2P 메신저 - 파일 전송 클라이언트 구현 [C#]) 이 필요하겠네요. 2. 이벤트 인자 및 대리자 소스 코드 2.1 연결 요청 수락 이벤트 인자 및 대리자 using System; using System.Net; namespace 파일_수신_서버 { public delegate void AcceptedEventHandler(object sender, AcceptedEventArgs e); public class AcceptedEventArgs:EventArgs { public IPEndPoint RemoteEndPoint { get; private set; } public string IPStr { get { return..

P2P 메신저 - 파일 전송 클라이언트 구현 [C#]

1. 유튜브 동영상 강의 안녕하세요. 언제나 휴일에 언휴예요. 이번 강의는 파일 전송 클라이언트를 구현하는 실습입니다. 파일 전송 및 수신에 필요한 서버와 클라이언트는 P2P 메신저를 구현할 때 필요한 요소 기술입니다. 먼저 익히고 넘어갈게요. 다음글 P2P 메신저 - 파일 전송 클라이언트 구현 [C#] 도 같이 학습하세요. 2. 파일 데이터 전송 이벤트 인자 및 대리자 소스 코드 using System; namespace 파일_전송_클라이언트 { public delegate void SendFileDataEventHandler(object sender, SendFileDataEventArgs e); public class SendFileDataEventArgs:EventArgs { public stri..

TCP 통신 – Echo 서버 클래스 구현, 이벤트 정의 및 콜백 처리 [C#]

1. 유튜브 동영상 강의 이번 실습은 Echo 서버 클래스를 구현하는 실습이예요. 여기서 만들 서버 클래스는 라이브러리로 제작하기 위한 목적으로 사전 작업하는 것이예요. 서버 클래스를 사용하는 곳에서 연결 수락 및 닫기, 메시지 수신에 관한 이벤트 처리를 할 수 있게 정의합니다. 대리자 및 이벤트 인자를 정의하고 Echo 서버에 이벤트 멤버를 정의하여 콜백 처리를 하는 것이죠. 2. 연결 수락 이벤트 인자 및 대리자 소스 코드 using System; using System.Net; namespace 에코_서버_응용___클래스로_정의 { public delegate void AcceptedEventHandler(object sender, AcceptedEventArgs e); public class Ac..