C
[C] TCP/IP 초기화하기
qkrwngus
2021. 2. 18. 23:01
Desc :
TCP/IP - 프로그램에서 원거리의 컴퓨터와 상호 데이터를 주고받기 위한 통신 규약
TCP/IP 통신 프로그램은 흔히 소켓 프로그램이라고도 한다
TCP/IP를 통해 데이터를 주고 받으려면
파일을 입출력 할 때 처럼
소켓의 개방 - socket()
소켓의 제거 - closesocket() 함수가 반드시 필요
윈도우 소켓 프로그램에서는 여러 종류의 소켓 버전이 사용되기 때문에
소켓 버전을 설정 - WSAStartup()
해제 - WSAClean() 함수도 필수적
TCP/IP에 사용되는 모든 함수들은 <winsock2.h>에 선언되어 있다
일반적인 C Runtime Library 가 아니기 때문에
wsock32.lib를 반드시 포함
#pragma comment (특정 라이브러리 파일을 포함시킬 때 사용)
소켓 디스크립터: 소켓을 개방, 송수신, 종료할 때 사용
WSADATA wsaData: 현재 사용 가능한 윈속 정보를 얻기 위해 정의, 소켓버전 값 저장됨
Source Code :
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"wsock32.lib")
void main()
{
SOCKET s; // 소켓 디스크립터
WSADATA wsaData;
if (WSAStartup(WINSOCK_VERSION, &wsaData) != 0)
{
printf("WSAStartup 실패, 에러코드 = %d\n", WSAGetLastError());
return;
}
puts(wsaData.szDescription); // 사용하고있는 윈속 버전
puts(wsaData.szSystemStatus); // 사용하고있는 윈속의 상태
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // TCP/IP용 소켓 개방
if (s == INVALID_SOCKET)
{
printf("소켓 생성 실패, 에러코드: %d \n", WSAGetLastError());
WSACleanup(); //WS2_32.DLL의 사용을 종료합니다
return;
}
if (closesocket(s) != 0) // 소켓 제거
{
printf("소켓 제거 실패, 에러코드 = %u \n", WSAGetLastError());
WSACleanup(); //WS2_32.DLL의 사용을 종료합니다
return;
}
if (WSACleanup() != 0) // 소켓에서 사용했던 자원들 비우기
{
printf("WSACleanup 실패, 에러코드 = %u \n", WSAGetLastError());
return;
}
puts("윈속을 사용할 수 있습니다.");
}
Result :