네트워크
UDP 소켓 함수
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 일반적으로 UDP 서버와 클라이언트는 다음과 같은 순서로 소켓 함수를 호출한다. UDP 서버 socket 함수를 호출해 소켓을 생성한다. 프로토콜을 결정한다. bind 함수를 호출해 생성한 소켓에 지역 IP, 포트 번호를 바인딩한다. recvfrom 함수를 호출하면 클라이언트가 보낸 데이터를 받을 수 있다. 이때 클라이언트의 원격 IP 주소와 원격 포트 번호를 알 수 있다. sendto 함수를 호출하면 데이터를 전송할 수 있다. closesocket 함수를 호출하여 소켓을 닫는다. UDP 클라이언트 socket 함수를 호출해 소켓을 생성한다. 프로토콜을 결정한다. s..
UDP 서버 클라이언트 개념
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. UDP TCP와 UDP는 전송 계층 프로토콜로 다음과 같은 공통점을 가진다. 포트 번호를 이용해 주소를 지정한다. 데이터 오류를 체크한다. IP의 패킷 전송 기능을 기반으로 동작하는데 전송 중 여러 원인으로 오류가 발생할 수 있다. IP는 프로토콜 동작에 필수적인 IP 헤더에 대해서만 오류를 체크하고 데이터는 체크하지 않는다. TCP, UDP는 헤더와 데이터에 대한 오류도 체크한다. 위와 같은 공통점을 제외하면 서로 상당히 다른 특징을 가지고 있다. TCP 연결형 프로토콜로 연결 설정 후 통신이 가능하다. 신뢰성 있는 데이터 전송을 보장한다.(데이터 재전송) 일..
스레드 동기화 - 임계 영역, 이벤트
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 스레드 동기화 필요성 멀티스레드를 이용하는 프로그램에서 스레드 두 개 이상이 공유 데이터에 접근하면 다양한 문제가 발생할 수 있다. 멀티스레드 환경에서 발생하는 문제를 해결하기 위한 일련의 작업을 스레드 동기화라고 하며, 윈도우 운영체제에서는 프로그래머가 상황에 따라 적절한 동기화 기법을 선택할 수 있도록 다양한 API 함수를 제공한다. 다음은 윈도우 운영체제에서 사용할 수 있는 대표적인 스레드 동기화 기법이다. 임계 영역: 공유 자원에 대해 오직 한 스레드만 접근할 수 있다.(한 프로세스에 속한 스레드 간에만 사용 가능) 뮤텍스: 공유 자원에 대해 오직 한 스..
멀티스레드 TCP 서버
출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 멀티스레드를 이용해 여러 클라이언트를 동시에 처리할 수 있는 TCP 서버를 작성할 것이다. 기본 골자는 다음과 같다. DWORD WINAPI ProcessClient(LPVOID arg) { // 전달된 소켓 SOCKET client_sock = (SOCKET)arg; // 클라이언트 정보 얻기 addrlen = sizeof(clientaddr); getpeername(client_sock, (SOCKADDR*)&clientaddr, &addrlen); // 클라이언트와 통신 while(1) { // .. } } int main() { while(1) { // 클라이..