TCP-IP 윈도우 소켓 프로그래밍 6

[TCP/IP] 6장. 멀티 스레드

1. 스레드 기초 1) 소켓 응용 프로그램과 멀티 스레드 ● TCP 서버 - 클라이언트의 문제점 클라이언트 2개 이상이 서버에 접속할 수는 있으나, "서버가 동시에 클라이언트 2개 이상에 서비스할 수 없다." 서버와 크라이언트의 send(), recv()함수의 호출 순서가 맞아야한다. 데이터를 보내지 않은 상태에서 양쪽에서 동시에 recv()함수를 호출하면 교착 상태가 발생할 수 있다. ● 1번 문제의 해결방법들과 장단점 방법1. 서버가 각 클라이언트와 연결해 통신하는 시간을 짧게 줄인다. 클라언트가 데이터를 전송하기 전에 매번 서버에 접속하고, 전송 후에는 곧바로 접속을 끊는 방식 장점 쉽게 구현 가능 서버의 시스템 자원을 적게 사용 단점 파일 전송 프로그램과 같이 대용량 데이터를 전송하는 응용프로그램..

[TCP/IP] 5장. 데이터 전송하기

응용 프로그램 프로토콜과 데이터 전송 1. 응용 프로그램 프로토콜 응용프로그램 프로토콜은, 응용 프로그램 수준에서 주고받는 데이터의 형식과 의미 그리고 처리 방식을 정의한 프로토콜이다. TCP/IP 표준 프로토콜과 비슷하나, 응용 프로그램마다 자유롭게 정의한다는 점, 즉 표준화되어있지 않다는 점이 다르다. 응용 프로그램 프로토콜의 기본은 "주고받을 메시지 형식"을 정하는 것이다. ex) 그림판 [주고 받아야할 정보] 1. 직선의 시작과 끝 2. 선의 두께와 색상 struct DrawingMessage1 { int type; // = LINE int x1, y1; // 직선의 시작점 int x2, y2; // 직선의 끝점 int width; // 선의 두께 int color; // 선의 색상 }; type..

[TCP/IP] 4장. TCP 서버- 클라이언트

TCP 서버-클라이언트 구조 1. 동작과 개념 서버는 먼저 실행하여 클라이언트가 접속하기를 기다린다. (listen) 클라이언트는 서버에 접속(connect)하여 데이터를 보낸다. (send) 서버는 클라이언트 접속을 수용하고(accept) 클라이너트가 보낸 데이터를 바당서(recv)처리한다. 서버는 처리한 데이터를 클라이언트에 보낸다. (send) 클라이언트는 서버가 보낸 데이터를 받아서(recv) 처리한다. 데이터를 주고받는 과정을 모두 마치면 접속을 끊는다. (closesocket) 2. 동작 원리 1) 서버는 소켓을 생성한 후 클라이언트가 접속하기를 기다린다. 이때 서버가 사용하는 소켓은 특정 포트번호(ex 9000번)와 결합되어 있어서 이 포트 번호로 접속하는 클라이언트만 수용할 수 있다. 2)..

[TCP/IP] 3장. 소켓 주소 구조체 다루

소켓 주소 구조체 1. 소켓 주소 구조체 네트워크 프로그램에서 필요한 주소 정보를 담고 있는 구조체 1) 기본형은 SOCKADDR 구조체이다. typedef struct sockaddr { u_short sa_family; char sa_data[14]; } SOCKADDR; sa_family : 주소 체계를 나타내는 16비트 정수 값 예) TCP/IP 프로토콜 → AF_INET 또는 AF_INET6 sa_data : 해당 주소 체계에서 사용할 주소 정보 예) TCP/IP 프로토콜 → IP 주소와 포트 번호 2) 프로토콜 체계에 따라 다양한 형태가 존재 예) TCP/IP → SOCKADDR_IN{ } 또는 SOCKADDR_IN6{ } IrDA → SOCKADDR_IRDA{ } 실제 프로그래밍에서는 응용 ..

[TCP/IP] 2장. 윈도우 소켓 시작하기

오류 처리 1. 오류처리 유형 오류처리 방법에 따라 다음 세가지 유형으로 나눌 수 있다. 1) 오류를 처리할 필요가 없는경우 : 리턴값이 없거나 호출 시 항상 성공하는 일부 소켓 함수 2) 리턴 값만으로 오류를 처리하는 경우 : WSAStartup() 함수 3) 리턴 값으로 오류 발생을 확인하고, 구체적인 내용은 오류 코드로 확인하는 경우 : 대부분의 소켓 함수 ※ 1,2 유형은 특별한 경우이다. ※ 대부분의 소켓함수는 3유형으로 처리한다. 2. 오류 코드 얻기 1) int WSAGetLastError(void) (사용 예시) if (소켓함수(...) == 실패) { int errcode = WSAGetLastError(); printf(errcode에 해당하는 오류 메시지); } WSAGetLastEr..

[TCP/IP] 1장. 네트워크와 소켓 프로그래밍

TCP/IP 프로토콜 개요 1. 인터넷 구성 요소 인터넷을 통해 통신을 수행하는 개체는 크게 호스트와 라우터로 나눌 수 있다. 1) 호스트(Host) : 최종 사용자의 응용프로그램을 수행하는 주체 2) 라우터 (router) : 호스트에서 생성된 데이터를 여러 네트워크를 거쳐 전송함으로써 서로 다른 네트워크에 속한 호스트 간에 데이터를 교환할 수 있게 하는 장비 3) 통신 프로토콜 : 호스트, 라우터/ 호스트-호스트 간에 통신을위한 정해진 절차와 방법 2. TCP/IP 프로토콜 구조 1) TCP/IP 프로토콜 인터넷의 핵심 프로토콜인 TCP와 IP를 비롯한 각종 프로토콜 운영체제의 일부로 구현되며, 응용 프로그램은 운영체제가 제공하는 TCP/IP 프로토콜의 서비스를 사용해 통신한다 응용프로그램은 운영체제..