본문 바로가기

개인공부/윤성우의 열혈 TCP&IP 소켓 프로그래밍24

Chapter 16 - 입출력 스트림의 분리에 대한 나머지 이야기 16-1 : 입력 스트림과 출력 스트림의 분리 fork() 함수 호출로 입력과 출력에 사용되는 파일 디스크립터를 구분 입력루틴(코드)과 출력루틴의 독립을 통한 구현의 편의성 증대 입력에 상관없이 출력이 가능하게 함으로써 속도의 향상 기대 fopen() 함수 호출로 읽기모드의 FILE 포인터와 쓰기모드의 FILE 포인터를 구분 읽기모드와 쓰기모드의 구분을 통한 구현의 편의성 증대 입력버퍼와 출력버퍼를 구분함으로써 버퍼링 기능의 향상 스트림 분리 이후 EOF에 대한 문제점 예시 // sep_serv.cpp #include #include #include #include using namespace std; #define BUF_SIZE 1024 int main(int argc, char *argv[]) { .. 2023. 2. 24.
Chapter 15 - 소켓과 표준 입출력 15-1 : 표준 입출력 함수의 장점 표준 입출력 함수는 이식성(Portability)이 뛰어나며 버퍼링을 통한 성능 향상에 도움이 됨 표준 입출력 함수를 사용시 소켓의 입출력 버퍼와는 별도의 추가적인 입출력 버퍼가 제공됨 따라서 표준 입출력 함수 버퍼에 데이터가 먼저 전달되고, 이 데이터가 소켓의 출력버퍼로 이동된 후 마지막으로 상대방에게 전송됨 전송해야할 데이터의 양이 많을수록 버퍼링의 유무에 따른 성능차가 발생함 이는 데이터 전송 패킷에 헤더정보가 들어가기 때문 즉, 버퍼링으로 한번에 전송하는 데이터의 양을 늘려 출력버퍼로의 데이터 이동 횟수를 줄이는 것이 효율적임 시스템 함수를 이용한 파일복사 프로그램 예시 // syscpy.cpp #include #include #include #define B.. 2023. 2. 24.
Chapter 14 - 멀티캐스트 & 브로드캐스트 14-1 : 멀티캐스트(Multicast) 멀티캐스트 방식 데이터전송은 UDP 기반 단, 하나의 목적지를 두었던 UDP에서와 달리 멀티캐스트에서의 데이터 전송은 특정 그룹에 가입되어있는 다수의 호스트가 됨 멀티캐스트 그룹 : 클래스 D에 속하는 IP주소(224.0.0.0 - 239.255.255.255) 멀티캐스트 서버는 특정 멀티캐스트 그룹을 대상으로 데이터를 딱 한번 전송 한번의 전송으로 그룹에 속하는 모든 클라이언트가 데이터를 수신 멀티캐스트 그룹의 수는 IP주소 내에서 추가 가능 특정 멀티캐스트 그룹으로 전송되는 데이터를 수신하기 위해서는 해당 그룹에 가입 멀티캐스트 패킷은 형태가 UDP 패킷과 동일 라우터들이 네트워크상에 띄워놓아진 하나의 패킷을 복사하여 다수의 호스트에 전달 따라서 하나의 영역.. 2023. 2. 24.
Chapter 13 - 다양한 입출력 함수들 13-1 : send & recv 입출력 함수 리눅스에도 send(), recv() 함수가 존재함 #include ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); // 성공시 전송된 바이트 수, 실패시 -1 반환 ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags); // 성공시 수신한 바이트 수(단, EOF 전송시 0), 실패시 -1 반환 윈도우의 send(), recv() 함수와 자료형 이름 외에는 차이가 없음 send(), recv() 함수 모두 마지막 매개변수로 데이터 송수신시 적용할 옵션정보가 전달됨 옵션정보는 비트로 사용되기 때문에 비트 OR 연산자를 이용해 둘 .. 2023. 2. 24.