Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

윈도우즈 네트워크 프로그래밍

윈도우즈 네트워크 프로그래밍도 슬슬 공부해 보자. 뭐, 유닉스(:12) 네트워크:::프로그래밍(:12)과 별 차이 있겠어 ? 라고 위안을 하면서. winsock(:12) 기반으로 접근해 보련다. 다행히도 BSD:::socket(:12)기반이다. BSD socket 기반인 관계로 리눅스 소켓 프로그래밍과 많은 부분이 중복된다. 중복되는 부분의 설명은 링크로 대신할 것이다.

ㅡ,ㅡ

개발환경 만들기

windows xp를 개발환경으로 하기로 했다. 리눅스(:12)도 계속해서 사용해야 하는 상황. 그때 그때 리부팅을 할 수는 없는 노릇이라서 virtualbox(:12)를 이용 가상환경을 만들기로 했다. 호스트 운영체제(:12)는 리눅스이고 게스트 운영체제로 윈도 xp와 윈도 7을 설치했다.

리눅스 BSD 소켓프로그래밍에서 winsock 으로 넘어가기

공부 했던 것을 대략 정리 해보자면.
  • 일단 개발환경은 visual studio 2008 로 했음. 공짜로 사용할 수도 있음.
  • 개발환경을 제외하면 차이가 없음. BSD:::socket(:12)기반이니 당연할지도.
    • BSD 소켓 인터페이스 외에, 윈속 확장 함수들을 별도로 제공한다. 이들 확장 함수들은 "WSA"로 시작한다. 윈도의 독자적인 기술들 즉 overlapped(중첩) I/O 모델, 이벤트 객체의 구현 기술을 이용하려면 이들 확장 함수를 이용해야 한다.
  • 리눅스는 socket이 커널모듈이라서 딱히 링크시킬 필요가 없는데, 윈도우즈는 라이브러리(:12)를 로딩하고 컴파일(:12)시 링크를 시켜줘야 함.
    • WSAStartup() 으로 winsock.dll 로딩
    • ws2_32.lib 를 링크시켜야 줘야함.
  • 중요한 것은 IDE를 이용한 개발환경에 적응하는 것과 overlapped과 멀티쓰레드 프로그래밍, 이들의 응용이라고 할 수 있는 IOCP 기술을 익히는 것인 것 같다.
그리고 중요한 점
  • 아 역시 vi(:12)가 최고.
  • vs 는 손 맛이 떨어짐.
  • 리눅스 shell(:12) 좋다. 윈 cmd로 창띄어서 테스트 할려니 짜증이 물밀듯이 밀려온다. MinGW(:12), cygwin(:12) 등을 고민해봐야 하나.
아래 방식으로 공부해볼 생각
  1. winsock은 리눅스 네트워크:::프로그래밍(:12)과 별차이 없는 듯하니, 개발환경에 익숙해질 겸 프로그램 몇개 만들면서 훑어보고.
  2. 멀티 프로세스, 멀티 쓰레드(:12) 환경을 중점적으로
  3. 입출력, IPC(:12) 관련 내용들 살펴보고
  4. IOCP 응용
  5. 감잡은 다음에 QT(:12)로 넘어가기.
    • MFC, CSocket는 걍 건너 뛰고 싶다.
    • ACE 같은 것도 괜찮을 것 같기는 하지만...
  6. SOCKET 데이터 타입

    윈속은 SOCKET 데이터 타입을 사용한다. SOCKET는 unsigned int의 typedef형 이다. 그러므로 BSD:::socket(:12)과 크게 다를 건 없다 하겠다. 굳이 SOCKET를 사용할 필요가 없긴 하다. int 형을 써도 된다.

    bsd 소켓의 socket함수는 int형을 반환한다는 점에 주의해야 한다. 다른 운영체제로 포팅할 경우 컴파일 시 경고 메시지가 발생할 수도 있다. 윈속 socket함수에서 에러 값인 INVALID_SOCKET은 ~0으로 정의되어 있다.

    비록 에러 처리에 문제가 되진 않지만 SOCKET 자료 형을 쓰는게 나은 것 같다.

    문서들

    제목 저자 변경일

    winsock api

    슬슬 정리해 나가야지 윈속 확장 함수를 먼저 정리할 계획이었는데, 어찌하다 보니 BSD 소켓 함수들을 우선 정리하게 됐다.
    제목 저자 변경일