네트워크/윈도우 소켓 프로그래밍

    멀티 스레드 서버를 위한 스레드 기초

    출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 1. 소켓 응용 프로그램과 멀티 스레드 지금까지 작성한 TCP 서버 클라이언트 프로그램은 싱글 스레드 기반으로 작동했기 때문에 다음과 같은 문제를 가지고 있다. 클라이언트 두 개 이상이 서버에 접속은 가능하다. 그러나 서버가 동시에 클라이언트 두 개 이상에 서비스할 수 없다. 서버와 클라이언트의 send, recv 함수의 호출 순서가 서로 맞아야 한다. 데이터를 보내지 않은 상태에서 양쪽에서 동시에 recv 함수를 호출하면 교착 상태가 발생할 수 있다. 첫 번째 문제에 대한 해결책과 각각의 장단점은 다음과 같다. 서버가 각 클라이언트와 연결해 통신하는 시간을 짧게 줄..

    응용 프로그램 데이터 전송

    출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) TCP 서버 클라이언트에서 데이터 전송을 진행할 것이다. 클라이언트에서 서버로만 데이터를 보낼 수 있다고 가정한다. 클라이언트는 다음과 같은 데이터를 보낼 수 있다. char* testdata[] = { "안녕하세요", "반가워요", "오늘따라 할 이야기가 많을 것 같네요", "저도 그렇네요" }; for(int i=0; i 0) { received = recv(s, ptr, left, flags); if(received == SOCKET_ERROR) return SOCKER_ERROR; else if(received == 0) break; left -= receiv..

    TCP 데이터 전송 함수

    출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 데이터 전송 함수는 크게 데이터를 보내는 함수와 받는 함수로 구분할 수 있다. 가장 기본이 되는 함수는 send()와 recv()이며, 그 외에 다양한 형태의 확장 함수가 존재한다. 여기에서는 기본 함수만 살펴 본다. 위의 그림은 TCP 소켓과 연관된 데이터 구조체다.(UDP 소켓 연관 구조체는 별도로 존재한다.) 지역/원격 IP 주소, 포트 번호 외에 송수신 버퍼가 존재한다. 송신 버퍼는 데이터를 전송하기 전에 임시로 저장해두는 영역이고, 수신 버퍼는 받은 데이터를 응용 프로그램이 처리하기 전까지 임시로 저장해두는 영역이다. 송수신 버퍼를 통틀어 소켓 버퍼라 부르며..

    TCP 클라이언트 함수

    출처: TCP/IP 윈도우 소켓 프로그래밍(https://product.kyobobook.co.kr/detail/S000001636201) 일반적으로 TCP 클라이언트는 다음과 같은 순서로 소켓 함수를 호출한다. socket() 함수를 사용하여 사용할 프로토콜을 결정한 소켓을 생성한다. connect() 함수를 사용하여 서버에 접속한다. 원격 IP 주소, 포트 번호는 물론 지역 IP 주소, 포트 번호도 결정되는 순간이다. send(), recv() 등의 데이터 전송 함수로 서버와 통신 후, closesocket() 함수로 소켓을 닫는다.(통신 종료) TCP 클라이언트에서만 사용하는 유일한 함수는 connect() 함수이다. 1. connect() connect() 함수는 TCP 프로토콜 수준에서 서버와 ..