728x90
윈도우 기반으로 구현할 땐 헤더파일이 약간 다르다.
일단 프로젝트의 속성에서 링커 하위에 있는 추가 종속성에 ws2_32.lib을 추가해주자. (위치는 다를 수 있다)
윈도우에서의 소켓은 윈속이라고 부른다.
윈속의 초기화를 살펴보자
#include <winsock2.h>
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
->성공 시 0, 실패 시 0이 아닌 에러코드 값 반환
wVersionRequested -> 프로그래머가 사용할 윈속의 버전정보 전달
lpWSAData -> WSADATA라는 구조체 변수의 주소 값 전달
wVersionRequested 변수는 Word 형으로 전달하여야 한다.
예를 들어 1.2버전의 윈속을 사용한다면 0x0201을 전달해야 한다. 소수점 아래가 먼저 온다.
이 과정이 번거로울 수 있기 때문에 윈속에서는 MAKEWORD()함수를 제공한다. 첫번째 인자가 주 버전, 두 번째 인자가 부 버젼이다. 예를 들어 위의 버전 정보를 전달하려면
MAKEWORD(1,2) == 0x0201 이다.
lpWSAData 매개변수에는 WSADATA구조체 변수의 주소값을 전달한다. LPWSADATA는 WSADATA의 포인터형이다.
윈속에서 이 부분은 거의 공식과 같이 등장한다.
int main(int argc, char* argv[])
{
WSADATA wsaData;
. . . .
if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0)
ErrorHandling("WSAStartup() error!");
. . . .
return 0;
}
윈속 라이브러리의 초기화방법을 알았으니 해제 하는 방법도 알아야한다.
#include <winsock2.h>
int WSACleanup(void);
-> 성공 시 0, 실패 시 SOCKET_ERROR 반환
더이상 윈속관련 함수의 호출이 불필요할 때, 위 함수를 호출하는 것이 원칙이나 프로그램이 종료되기 직전에 호출하는 것이 보통이다.
728x90
'Study > TCP_IP' 카테고리의 다른 글
[TCP_IP] 소켓 프로그래밍 _ 소켓의 생성 과정 (linux) (0) | 2022.04.13 |
---|