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 :