NetWork-윈도우 소켓 생성과 종료

* 윈속 초기화 (윈도우 소켓을 사용하기 위해서는 항상 윈속 초기화 필요

사용자 삽입 이미지

●  wVersionRequested
 - 프로그램이 요구하는 최상위 윈속 버전
 - 하위 8비트에 주(major) 버전을, 상위 8비트에 부(minor) 버전을 넣어서 전달함

●  lpWSAData
 - WSADATA 타입 변수와 주소 
 - 시스템에서 제공하는 윈속 구현에 대한 세부 사항을 얻을 수 있음



* 윈속 종료(윈속 초기화가 있으면 끝에는 종료를 시켜주어야 함)

사용자 삽입 이미지

* 윈속 초기화와 종료사용 예제

       #include <winsock2.h>

       int main(int argc, char* argv[])
       {
           WSADATA wsa;         // 윈속 초기화
           if(WSAStartup(MAKEWORD(2,2), &wsa) != 0){ 
               return -1;
           }
           MessageBox(NULL, "윈속 초기화 성공", "성공", MB_OK);     // 초기화 성공시 메시지박스 출력

          WSACleanup();          // 윈속 종료

           return 0;
       }


* 소켓 생성 함수

사용자 삽입 이미지

- 사용자가 요청한 프로토콜을 이용하여 통신을 할 수 있도록 내부적으로 리소스를 할당하고,
이를 접근할 수 있는 일종의 핸들값(SOCKET 타입, 32비트 정수)인 소켓 디스크립터(socket descriptor)를 리턴

소켓 생성 함수 인자1(주소 체계)사용자 삽입 이미지
 - TCP통신을 위해 AF_INET 사용

* 소켓 생성 함수 인자2(소켓 타입)사용자 삽입 이미지
  - TCP의 경우 SOCK_STREAM 사용
  - UDP의 경우 SOCK_DGRAM 사용

* 소켓 생성 함수 인자3(프로토콜)사용자 삽입 이미지사용자 삽입 이미지

 - TCP의 경우 IPPROTO_TCP를 사용하거나 0을 사용
 - UDP의 경우 IPPROTO_UDP를 사용하거나 0을 사용



* 소켓 종료 함수

사용자 삽입 이미지

* 소켓 생성 종료 함수 사용 예
       #include <winsock2.h>
       #include <stdlib.h>

       void err_quit(char *msg)
       {
           LPVOID lpMsgBuf;
           FormatMessage( 
               FORMAT_MESSAGE_ALLOCATE_BUFFER|
               FORMAT_MESSAGE_FROM_SYSTEM,
               NULL, WSAGetLastError(),
               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
               (LPTSTR)&lpMsgBuf, 0, NULL);
           MessageBox(NULL, (LPCTSTR)lpMsgBuf, msg, MB_ICONERROR);
           LocalFree(lpMsgBuf);
           exit(-1);
       }

       int main(int argc, char* argv[])
       {
           // 윈속 초기화
           ...

           SOCKET tcp_sock = socket(AF_INET, SOCK_STREAM, 0);  // socket() 소켓생성
           if(tcp_sock == INVALID_SOCKET) err_quit("socket()");        // 소켓생성 실패시 에러함수 호출
           MessageBox(NULL, "TCP 소켓 생성 성공", "성공", MB_OK);  // 소켓생성 성공시 메시지박스 출력

           closesocket(tcp_sock);    // closesocket() 소켓종료

           // 윈속 종료
           ...
       }


출저:http://alisa2304.tistory.com/14



 

이 글을 공유하기

댓글

Designed by JB FACTORY