본문 바로가기
소프트웨어개발

[ WIN32 ] Windows Sockett sample code

by 보이드메인 2016. 1. 5.

윈도우즈에서 소켓 프로그래밍에서 제일 먼저 호출 하게 되는것이 WSAStartup 함수이다.

이 함수는 UNIX 소켓 프로그램에는 없는것으로 WSACleanup 함수와 쌍을 이뤄 소켓 프로그램의

시작과 끝을 나타낸다. 이 함수가 하는 일은 윈속 동적 연결 라이브러리를 초기화하고

윈속 구현이 애플리케이션 요구사항을 충족하는지 확인한다.

프로토 타입은 다음과 같다.

int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);

wVersionRequired : 애플리케이션이 사용할 수 있는 WindSock API의 최상위 버전

상위 바이트가 마이너 버전, 하위 바이트가 메이저 버전

lpWSAData : WSADATA 타입의 구조체에 대한 포인터이다.

사용예는 다음과 같다.

#include <iostream>

#include <winsock2.h>

using std::cout;

using std::endl;

int main()

{

WORD wVersionRequested = MAKEWORD(2, 2); // WinSock 2.2 요청

WSADATA wsaData;

int nErrorStatus;

nErrorStatus = WSAStartup(wVersionRequested, &wsaData);

if(nErrorStatus != 0)

{

cout << "WSAStartup 실패..." << endl;

return 0;

}

// WinSock 버전 정보 체크

if((LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested)) ||

(HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested)))

{

cout << "지원되지 않는 버전이다." << endl;

}

cout << "버전 : "

<< static_cast<int>LOBYTE(wsaData.wVersion) << "."

<< static_cast<int>HIBYTE(wsaData.wVersion) << endl;

WSACleanup(); // WinSock의 사용을 마친다.

return 0;

}

빌드는 Visual Studio 2008 에서 Win32 콘솔 응용프로그램 템플릿에서

빈프로젝트를 선택한다음 cpp 파일을 추가해서 작성한다.

그냥 빌드하면 링크시에 다음과 같은 오류가 발생한다.

1>링크하고 있습니다...

1>WSAStartupTest.obj : error LNK2019: __imp__WSACleanup@0 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.

1>WSAStartupTest.obj : error LNK2019: __imp__WSAStartup@8 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.

1>D:\vs2008\cpp\WinSock\Debug\WSAStartupTest.exe : fatal error LNK1120: 2개의 확인할 수 없는 외부 참조입니다.

ws2_32.lib를 찾지 못하기 때문이다. 프로젝트 속성에 다음을 추가하여 빌드한다.

[출처] [VC++] WSAStartup 함수 - WinSock 프로그래밍|작성자 미니


'소프트웨어개발' 카테고리의 다른 글

[UNIX] Socket FAQ  (0) 2016.01.05
[ Linux/C/C++] df명령, FileSystem 용량  (0) 2016.01.05
[ C ] 전처리문 (#define, #if, #ifdef, #ifndef, #defined, .. )  (0) 2016.01.05
[ C ] 소스 IPC_spectrum.c  (0) 2014.08.23
Praat  (0) 2014.08.23

댓글