콘솔 응용프로그램을 만들 때 상황에 따라서 콘솔 창(Console Window)이 필요 없는 경우가 있습니다. 이런 경우 간단하게 창을 띄우지 않는 방법이 있습니다. 1. 간단한 방법 프로젝트 속성 > 응용 프로그램 > 출력 형식 에 보시면 콘솔 프로젝트의 경우 '콘솔 응용 프로그램'으로 설정되어 있습니다. 이것을 'Windows 응용 프로그램'으로 바꿔주면 명령 프롬프트 창이 띄지 않습니다. 단순히 콘솔 창만 가리고 싶다면 이 방법이 최고죠 ㅎㅎㅎ 하지만 비하인드 코드에서 아무런 제어를 할 수 없다는 단점이 있습니다. 2. 'WinAPI'를 이용한 방법 조금 번거롭더라도 'WinAPI'를 이용하면 코드에서 컨트롤이 가능합니다. 아래와 같이 'WinAPI'를 마샬링 해주고 [DllImport("kerne..
유튜브에 올라와있는 'OpenTK' 플랫폼 튜토리얼을 따라하는 포스팅입니다. 'OpenTK'는 'OpenGL', 'OpenCL', 'OpenAL'가 합쳐진 C#랩퍼입니다. 0. 원본 OpenTK Platformer Tutorial: Part 1 - Clearing and Drawing in our Custom Game Class 게임(Game) 클래스를 만들어 화면을 초기화(Clearing)하고 서페이스(surface)를 그리는 방법. 1. 게임 클래스 만들기 프로젝트에 'Game'클래스를 만들어 줍니다. 이 클래스는 'GameWindow'를 상속받습니다. 그리고 주요 이벤트를 오버라이드(override, 재정의)해줍니다. class Game : GameWindow { public Game(int wid..
유튜브에 올라와있는 'OpenTK' 플랫폼 튜토리얼을 따라하는 포스팅입니다. 'OpenTK'는 'OpenGL', 'OpenCL', 'OpenAL'가 합쳐진 C#랩퍼입니다. 'Mono'와 호환되여 멀티플랫폼지원합니다. 'OpenAL'과 'OpneES'도 사용할 수 있고 자말린 스튜디오(Xamarin Studio)에서도 사용 가능합니다. 0. 원본 OpenTK Platformer Tutorials: Part 0 '비주얼 스튜디오 설치' 및 'OpenTK' 라이브러리 참조 하기. 1. 설치 하기 'OpenTK' 공식홈페이지에 가서 라이브러리를 다운받습니다. (참고 : OpenTK) 설치를 합니다. 설치할때 설치경로 확인합니다. 단순히 압축을 푸는 것이기 때문에 아무곳에나 설치하셔도 됩니다. 압축을 푼 폴더에 ..
닷넷에서 클래스(Class)와 같은 오브젝트(object)를 바이트 배열(byte Array)로 만드는 건 좀 번거로운 작업이 필요합니다. 그런 번거로운 작업 중 재미있는 게 있어서 퍼왔습니다. 바로 'XML'을 이용하여 클래스를 바이트 배열로 만드는 것입니다. (참고 : code.about - HOW TO CONVERT FROM YOUR CLASS OBJECT TO BYTE[] AND VICE VERSA AND SEND IT THROUGH SOCKETS) 1. 기능 구현하기 일단 클래스를 만들어 봅시다. public class TestXML { public string Data1 { get; set; } public string Data2 { get; set; } public string Data3 {..
간만에 콘솔 프로그램을 만들다가 보니.......콘솔 프로그램은 종료 이벤트 처리를 어떻게 하지? 1. 이벤트 연결 콘솔 프로그램은 UI가 없기 때문에 이벤트를 직접 연결 해야 합니다. 해당 이벤트 이름은 'ProcessExit'입니다. (참고 : stackoverflow Gonzalo님 답변 - How to run code before program exit?) static void Main(string[] args) { AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; } static void CurrentDomain_ProcessExit(object sender, EventArgs e) { throw new NotImplemente..
간만에 슈퍼소켓을 사용하려는 에러가 딱!!! 'System.Configuration.ConfigurationElement' 형식이 참조되지 않은 어셈블리에 정의되었습니다. 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 어셈블리에 참조를 추가해야 합니다. 아놔 ㅎㅎㅎㅎㅎ 이건 내용을 잘못 이해하면 컨피그에 퍼블릭 키 토큰(Public Key Token)을 추가해야 할것 같지만 사실 'System.Configuration'가 참조에 없다는 뜻입니다. 참조 관리자를 열어 어셈블리 > 프레임워크 에 보면 'System.Configuration'를 찾아 추가하시면 됩니다. 요걸 추가하면 에러가 사라집..
슈퍼소켓(SuperSocket)을 테스트 하다보니 예상하지 못한 문제가 몇 가지 있네요 ㅎㅎㅎㅎ 여러 문제 중 클라이언트에서는 데이터를 전송했는데 서버에서 반응이 없는 경우를 알아봅시다. 0. 문제의 확인 클라이언트에서 데이터를 보내 봅시다. 서버에서 접속되었다는 메시지가 잘 출력되는 것으로 보아 서버에 접속은 됐습니다. 그런데 메시지를 보내면(스크린 샷에서 '보내기'로 표시된 부분이 메시지를 보내는 부분입니다.) 서버에서 응답이 없습니다 ㅡ.ㅡ (정상적인 동작이라면 서버로 보낸 메시지가 그대로 돌아와야 합니다.) 그래서 기존에 만들었던 서버로 테스트해보니 클라이언트에서 데이터는 잘 넘어오고 있습니다. 1. 문제의 이유 이런 문제가 발생하는 것은 슈퍼소켓의 기본리시브필터가 아스키(ASCII)로 된 텔넷 ..
저도 .NET을 초기 버전부터 사용하던 사람이라 초기에 만든 'Client/Server'프로그램을 계속 고쳐서 사용했습니다. 그런데 이번에 슈퍼소켓을 사용하여 서버를 다시 만들려고 자료를 찾다 보니 '.NET 3.5' 부터는 'SocketAsyncEventArgs'를 사용하라고 권장하는군요. 그래서 샘플을 찾는데..... 원하는 셈플이 없어서 하나 만들었습니다. (참고 : 'SocketAsyncEventArgs'를 이용한 채팅(Chatting) Client/Server 예제 0.7) 샘플을 만들면서 느낀 점을 간단히 적어 보겠습니다. 1. 무한 루프여 안녕~ 이전에는 1) 서버에 리스너를 동작시킨 후 2) 무한 루프를 만들고 3) 'TcpListener.AcceptSocket()'로 무한 루프를 대기 시..
흠.... 제목이 좀 이상한데.... 엄밀히 말하자면 닷넷(.NET)을 이용하여 닷넷을 컴파일하는 것을 말합니다. 일종의 컴파일러를 만드는 것을 의미합니다. 다행히도 닷넷에서는 컴파일을 위한 API를 제공하기 때문에 손쉽게 이런 컴파일러를 만들 수 있죠. 그럼 이런 컴파일러를 왜 만들어야 하는가? 라는 질문을 하게 되는데.... 이건 이 포스팅의 마지막에 다루겠습니다. 1. 'CodeDom'을 이용하기 MSDN에 설명이 잘 나와 있습니다만.... 이 기능은 소스 코드를 빌드하기 위한 기능입니다. (참고 : MSDN - CodeDOM 사용) 그러니 우리는 'CodeDom'을 이용하여 동적으로 코드를 컴파일 할 수 있다는 것입니다. 2. 샘플 만들기 샘플을 간단하게 윈폼(WinForm)에서 만들겠습니다. 버..
일반적으로 'DLL'은 개발단계에서 참조를 통해 연결하여 사용합니다. 하지만 여러 가지 상황에 따라서 동적 로드를 해야 하는 경우가 있죠. 대표적인 경우가 국가나 언어, 운영체제 등에 따라 다른 dll을 써야 하는 경우라던가 동적으로 생성된 'DLL'을 참조해야 하는 경우라던가... 물론 설계 의도에 따라 많이 달라지니 꼭 필요하다고는 볼 수 없습니다 ㅎㅎㅎ 어찌 됐건 동적으로 DLL을 로드하여 사용하는 방법을 알아봅시다. 1. 테스트 DLL 만들기 클래스 라이브러리로 프로젝트를 2개 생성합니다. 하나는 'TestDll1', 다른 하나는 'TestDll2'로 생성합니다. 각각의 코드는 아래와 같습니다. namespace TestDll1 { public class Class1 { public string ..