전체 글174 Chapter 07 - 소켓의 우아한 연결종료 07-1 : TCP 기반의 Half-Close 리눅스의 close()와 윈도우의 closesocket() 함수는 완전종료로써 데이터의 송수신을 완전히 끊어버림을 의미 이러한 송수신 과정에서의 일방적 연결종료로 인해 문제가 생길 수 있으므로 일부 스트림만 종료시키는 Half-close 방법을 사용할 수 있음 스트림(Stream) : 두 호스트가 소켓을 통해 상호간에 데이터 송수신이 가능한 상태 스트림은 단방향을 가리키기 때문에 양방향 통신을 위해서는 두 개의 스트림이 필요 즉, 소켓 연결시 각 호스트별로 입력 스트림과 출력 스트림이 생성 Half-close에는 shutdown() 함수를 사용 #include int shutdown(int sock, int howto); // 성공시 0, 실패시 -1 반환 .. 2023. 2. 24. Chapter 06 - UDP 기반 서버 / 클라이언트 06-1 : UDP에 대한 이해 UDP는 신뢰할 수 없는 전송방법을 제공하지만 구조가 간결하기 때문에 성능이 우월함 UDP는 TCP와 달리 흐름제어(Flow Control)가 존재하지 않음 호스트로 수신된 패킷을 포트정보를 참조하여 최종 목적직인 UDP 소켓의 전달하는 것이 UDP의 가장 중요할 역할 실시간 영상 및 음성과 같은 멀티미디어 데이터는 일부가 손실되어도 크게 문제가 되지 않고, 실시간 서비스이므로 속도가 중요하기 때문에 UDP의 사용을 고려해볼만함 송수신 데이터량이 적으면서 연결이 잦은 경우에는 UDP가 TCP보다 훨씬 빠르고 효율적 06-2 : UDP 기반 서버 / 클라이언트의 구현 UDP에서는 TCP와 달리 서버와 클라이언트가 연결된 상태로 데이터를 송수신하지 않음 따라서 listen().. 2023. 2. 24. Chapter 05 - TCP 기반 서버 / 클라이언트 2 05-1 : 에코 클라이언트의 완벽 구현! 에코 클라이언트의 경우 클라이언트가 수신해야 할 데이터의 크기를 미리 알고있음 따라서 데이터가 전부 전송될 타이밍에 맞추어 read() 함수를 호출하는 것으로 기존의 문제점을 해결 // echo_client2.cpp ... while (1) { cout 2023. 2. 24. Chapter 04 - TCP 기반 서버 / 클라이언트 1 04-1 : TCP와 UDP에 대한 이해 TCP(Transmission Control Protocol) : 연결을 지향하기 때문에 스트림 기반 소켓이라고도 부름 TCP는 'TCP/IP 프로토콜 스택'에 속해있음 APPLICATION 계층 - TCP / UDP 계층 - IP 계층 - LINK 계층으로 구분 각각의 계층은 운영체제와 같은 소프트웨어 또는 NIC와 같은 물리적인 장치가 담당 프로토콜 스택은 OSI 7계층으로 세분화되나, 프로그래머 관점에서는 4계층으로만 이해해도 충분함 LINK 계층 물리적인 영역의 표준화에 대한 결과 LAN, WAN, MAN과 같은 네트워크 표준과 관련된 프로토콜을 정의 IP 계층 데이터를 목적지로 전송하기 위한 경로 선택을 담당하는 계층 IP(Internet .. 2023. 2. 24. 이전 1 ··· 17 18 19 20 21 22 23 ··· 44 다음