NetWork-윈도우 소켓 생성과 종료
- 프로그래밍/NetWork
- 2011. 5. 16. 11:54
* 윈속 초기화 (윈도우 소켓을 사용하기 위해서는 항상 윈속 초기화 필요
- 프로그램이 요구하는 최상위 윈속 버전
- 하위 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
이 글을 공유하기