Project History11 [C# 채팅 프로그램 #05] 채팅 프로그램 프로젝트 최종 시연 영상 및 설명 서론 아마 채팅 프로그램 카테고리의 마지막 글이 되지 않을까 싶다. 앞서 학습할 기능들에 대한 정리는 충분히 한 것 같고 이번 글에서는 프로그램에 어떤 기능들이 들어가있고 실제로 어떻게 동작하는지에 영상으로 정리해보겠다. 프로그램 사용 기능 ==.Net Windows Forms 이용 == 1. TCP/IP 통신을 활용한 서버 / 클라이언트 구현 2. SocketAsyncEventArgs를 활용한 비동기 통신 기능 3. 특정 클라이언트에게만 송신 하는법 4. Json을 이용한 메세지 송 수신 기능 5. 송 수신 패킷 암호화&복호화(AES-256) 기능 --> 위의 기능들이 모두 이뤄진 프로그램이며 아래에서 동작 시연으로 마무리하겠다 ! ***** 프로그램 동작 영상 ***** 프로그램 동작 시나리오 1. .. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 24. [C# 채팅 프로그램 #04] AES-256 암호화를 이용하여 JSON 메세지 송 수신 기능 구현 서론 이번 글이 채팅 프로그램 프로젝트 기능 정리의 마지막 글이 될 것같다. (이 후 추가 기능으로 있을 지 모르겠지만) 이번 글에서의 중점 포인트는 제목에 써놓았듯 AES암 복호화를 이용하여 호스트와 클라이언트간의 채팅 송 수신하는 방법이다. 나는 AES-256 암호화로 암 복호화 작업을 진행하였다. 우선 설명하기 앞서 AES의 개념에 대해 어느정도 짚고 넘어가야 하는데, 해당 내용은 이전 글을 한번 읽어보면 아래 소스를 이해하는데 크게 어려움이 없을 것이라 생각한다. 사용한 AES 256의 KEY와 IV KEY : "1234567890123456" -> 이후 byte[]로 Convert 진행 IV : new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 23. [C# 채팅 프로그램 #03] TCP/IP통신에서 특정 클라이언트에게만 메세지 보내기 보통 패킷을 주고받는 tcp/ip 통신서버에서 현재 연결되어있는 여러 소켓중 특정 클라이언트 소켓에만 보내는 방법에 대해 여러 가지 고민을 해봤다. 해당 기능을 구현할 때 까지의 흐름은 이랬다 연결하는 소켓의 핸들러id를 배열에 담아두었다가 사용하면 되지않을까? 근데 그럴려면 다중 소켓이 순서 상관없이 마구 접속해있다는 가정하에 원하는 클라이언트를 어떻게 찾을 수 있을까?? 이러한 문제에 또 봉착했다. 근데 생각해보니 그냥 처음 클라이언트가 접속할때 고유ID를 받아놓고 컬렉션에 고유ID와 해당 소켓을 담아두고 특정 장비에게 보낼 때 컬렉션에서 선택한 아이디를 찾아 해당 소켓을 Send하면 되지 않을까?라는 생각에 아 이거다 하고 바로 진행하였다. 진행 후에 다른 사람들은 어떻게 할지 찾아본 결과 비슷하게.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [C# 채팅 프로그램 #02] IOCP - EAP 패턴을 이용한 비동기 TCP/IP 클라이언트 구현 (SocketAsyncEventArgs) 이전 글에서 서버를 구현하는 것을 알아 보았고 이번 글에서는 클라이언트에 대해 알아 볼 것이다. 클라이언트에서도 서버와 동일하게 SocketAsyncEventArgs 클래스를 사용했으며 구현 소스를 통해 알아보자. 1. 서버 연결 client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(IPAddress.Parse(tb_server_ip.Text), int.Parse(tb_server_port.Text)); JObject data = new JObject(); data.Add("type", "init"); data.Add("text", tb_userid.Text); // json -.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [C# 채팅 프로그램 #01] IOCP - EAP 패턴을 이용한 비동기 TCP/IP 서버 구현 (SocketAsyncEventArgs) 이번글에서는 비동기 소켓 이벤트인 SocketAsyncEventArgs를 활용하여 서버를 구현을 해보려한다. SocketAsyncEventArgs는 보통 유니티 게임 서버 개발을 할때 사용하는 경우가 있다고 하며, 나도 사실 이번 프로젝트 진행하면서 처음 사용해본 클래스이다. 이 클래스는 닷넷 비동기 소켓에서 사용하는 개념으로 비동기 소켓 메서드를 호출할 때 마다 반드시 필요한 객체이다. 닷넷 3.5 이전 버전에서는 Begin과 End계열의 API를 사용했지만 닷넷 3.5이상 버전부터는 해당 클래스의 API를 사용하여 소켓 프로그래밍을 구현할 수 있다고 한다. 나도 여지껏 사용해왔던 Begin ~ End 계열의 API를 사용할 경우 IAsyncResult라는 객체를 사용했지만 해당 이벤트 클래스를 이용하.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [C# 채팅 프로그램 #00] 작업 환경 / 기능 구현 리스트 / UI 제작 서론 앞으로 어플리케이션 일을 하면서 TCP/IP 연동은 기본적으로 알아야할 소양이라 생각이 들어 그간 많이 사용해보지 못한 기능들을 사이드 프로젝트를 통해 적립시켜놓을려고 한다. 기본적인 채팅 기능만을 가진 프로그램을 만드는것은 크게 어렵지 않지만 이번 프로젝트를 통해 중요 포인트로 보고있는것은 특정 클라이언트에게 보내는 방법과 패킷 암복호화 작업이다. 사실 이정도만 할줄알면 기본적인 어느 tcp/ip를 통한 연동 프로그램을 만드는데 크게 문제가 없을 것이라고 생각든다. 이번 기회에 나만의 tcp/ip 통신 기술 스택을 쌓아보자. 프로젝트 진행 환경 Tool : VisualStudio 2019 작업 : Windows Form 환경 : .Net Framework 4.8 프로젝트 기능 구현 예정 1. TC.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [C# 원격 제어 프로그램 만들기 #04] 원격 프로그램 서버 / 클라이언트 구현 최종 개발을 완료한지는 꽤 됐는데 작성할 시간이 나질않아 이제야 느지막이 작성한다. 이번 프로젝트를 통해 #0에서 말했던 학습 목적은 어느정도 달성한 것 같다. VMWare에서 지원해주는 vir win10 프로그램을 이용하여 원격지로 접속하여 마우스를 움직이는 형식으로 만들었다. 자세한 소스는 이 후 git에 올리도록 해보겠다. 소스는 어디에 ? https://github.com/Anjeongkyun Anjeongkyun - Overview 안녕하세요 윈도우 어플리케이션 개발을 하고 있는 안정균입니다 ! 현재는 Spring 백엔드 개발에 전념하고있습니다 :) - Anjeongkyun github.com Project History/원격 제어 프로그램 만들기 2022. 2. 9. [C# 원격 제어 프로그램 만들기 #03] Win API (user32.dll)을 이용한 윈도우 이벤트 구현 (DllImport / Win32 API / keybd_event 등) 서론 이번 글에서는 Win32 api인 user32.dll을 이용하여 키보드, 마우스 이벤트를 전송할 때 사용하는 방법을 알아보겠다. 방법은 간단하다. Win API ? (Win32 API) Win API의 명칭부터 정리하면 과거에는 Win32 API라는 이름으로 불렸지만 현재는 64비트의 시대이기때문에 통합해서 Windows API라고 부른다고 한다. 해당 API는 Windows 운영 체제에 대한 인터페이스를 말하며, OS와의 모든 상호 작용 (창 만들기, 파일 열기, 네트워크 액세스 등)은 제공된 함수 호출을 거쳐서 진행되는 API이다. 이것을 다시 쉽게 정리하면 MS에서 어플리케이션 개발자들에게 쉽게 가져다 쓰라고 제공해준 API라고 보면된다. - MSDN indows API 사이트 https://.. Project History/원격 제어 프로그램 만들기 2022. 1. 9. [C# 원격 제어 프로그램 만들기 #02] TCP/IP를 이용한 이미지 전송 프로그램 만들기 서론 이번 챕터는 tcp/ip 통신을 이용해 클라이언트에서 서버에게 캡쳐한 이미지를 전송하는 프로그램을 만들어 볼 것이다. 원격 프로그램을 만들기 전 이 프로그램을 진행한 이유는 현재 서버와 클라이언트단의 통신 테스트 및 파일 전송 유닛테스트를 하기 위함이라고 생각하면 될 것 같다. 우선 어떻게 구현하였는지 영상부터 보여주고 시작하겠다. 이미지 전송 클라이언트 프로그램 캡쳐한 이미지를 전달 할 클라이언트 프로그램 이미지 받을 서버 프로그램 이미지를 전달 받을 서버 프로그램 설명 위에서 클라이언트와 서버 클라이언트의 영상을 나누지않고 한번에 전송 전달 하는 과정을 보여드리고싶었지만, 윈도우 10 녹화기능을 이용하다보니 프로그램 하나씩 밖에 녹화를 하지 못한점 양해 부탁드립니다. 우선 클라이언트단에서 Pos.. Project History/원격 제어 프로그램 만들기 2022. 1. 4. [C# 원격 제어 프로그램 만들기 #01] 서버 - 클라이언트 통신 구조 만들기 서론 이 글에서 다른 PC에 접속하기 위해서 가장 중요한 TCP/IP 통신을 이용한 서버와 클라이언트의 비동기 소켓 구조로 만든 소스를 정리 할려고한다. 통신간 기능 로직은 아직 작성하지 않았고 Connect - Accept 과정을 작성한 글이며, 자세한 기능 로직은 추 후 완성 코드를 보면 좋을 것 같다. 개비할수록 소스의 변형이 일어날 수 있지만 처음 설계는 멀티스레드 구조가 아닌 비동기로 작성했다. (쓰레드를 안돌리고 비동기로 작성한 이유는 정리하여 이 후에 작성해보겠다.) 코드 (클라이언트) using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using.. Project History/원격 제어 프로그램 만들기 2021. 12. 26. [C# 원격 제어 프로그램 만들기 #00] 클래스 / 역할 정리 평소 회사에서 Teamviewer나 Ultra VNC라는 프로그램을 활용하여 원격프로그램을 사용했는데, 어떻게 다른 컴퓨터를 제어할 수 있는지 궁금해서 유튜브에 찾아보니 좋은 강의가 있어 나도 참고하여 해당 원격 프로그램을 만드는 프로젝트를 진행할려고한다. 이 프로젝트를 진행하면서 중점적으로 배울 내용들은 이러하다. 1. 이벤트 핸들러, 대리자 등 2, 윈도우 이벤트 후킹 3. 클래스 간 데이터 공유 4. 서버 - 클라이언트 구조 5. Native DLL(Windows API) 사용 방법 첫번째 글은 해당 프로젝트를 시작하기 전 사용할 클래스들을 정리해볼려고 한다. 위의 표대로 클래스들을 정의하고 해당 내용(역할)들을 채워나갈 예정이다. 위는 실제 Visual Studio에서 생성한 cs이다. 해당 이슈.. Project History/원격 제어 프로그램 만들기 2021. 12. 26. 이전 1 다음 💲 많이 본 글