네트워크/윈도우 소켓 프로그래밍
TCP 서버 함수
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 응용 프로그램 관점에서 소켓은 운영체제의 TCP/IP 구현에서 제공하는 데이터 구조체를 참조하기 위한 매개체다. 응용 프로그램은 통신하려면 다음과 같은 요소가 결정되어야 한다. 프로토콜: 통신 규약으로, 소켓을 생성할 때 결정한다. 지역 IP 주소와 지역 포트 번호: 서버 또는 클라이언트 자신의 주소다. 원격 IP 주소와 원격 포트 번호: 서버 또는 클라이언트가 통신하는 상대의 주소다. 이번에 설명할 소켓 함수는 지역 주소와 원격 주소를 결정하고 TCP 상태(LISTENING, ESTABLISHED 등)를 변경하기 위한 일련의 절차라 할 수 있다. 소켓 함수는 서버 ..
소켓 주소 구조체 다루기
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 소켓 주소 구조체 소켓 주소 구조체는 소켓 프로그램에서 필수로 사용해야 하는 자료구조이다. 네트워크 프로그램에서 필요한 주소 정보를 담고 있으며, 다양한 소켓 함수의 인자로 사용한다. 프로토콜 체계에 따라 주소 지정 방식이 다르므로 다양한 소켓 주소 구조체가 존재한다. 가장 기본이 되는 구조체는 SOCKADDR 구조체로 ws2def.h 파일에 다음과 같이 정의되어 있다. typedef struct sockaddr { u_short sa_family; char sa_data[14]; } SOCKADDR; sa_family: 주소 체계를 나타내는 16비트 정수 값이..
소켓의 생성과 닫기
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 생성 윈속 초기화가 성공했으면 이제 소켓을 생성할 준비가 된 것이다. 소켓을 사용한 통신의 기본 요건은 양 끝단이 모두 같은 프로토콜을 사용하는 것이다. socket() 함수는 사용자가 요청한 프로토콜을 사용해 통신할 수 있도록 내부적으로 리소스를 할당하고, 이에 접근할 수 있는 핸들(SOCKET 타입, 32비트 정수)을 리턴한다. 이를 소켓 디스크립터라 부르며, 각종 소켓 함수의 인자로 전달해 사용한다. // 성공: 새로운 SOCKET(32비트 정수) // 실패: INVALID_SOCKET SOCKET socket { int af, int type, int p..
윈도우 소켓 애플리케이션 초기화 및 종료
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 초기화 모든 윈도우 소켓 애플리케이션은 다음과 같은 구조를 가진다. 소켓 초기화 -> 소켓 생성 -> 네트워크 통신 -> 소켓 닫기 -> 소켓 종료 따라서 모든 윈도우 소켓 함수를 호출하기 전에 반드시 윈속 초기화 함수인 WSAStartup() 함수를 호출해야 한다. 이 함수는 프로그램에서 사용할 윈속 버전을 요청함으로써 윈속 라이브러리(WS2_32.DLL)를 초기화하는 역할을 한다. WSAStartup() 함수가 실패할 경우 WS2_32.DLL이 메모리에 로드되지 않는데, 이 경우에는 WSAGetLastError 함수에서 정확한 오류 코드를 리턴하지 않는다. ..