Network/Network Programming (4) 썸네일형 리스트형 [C++/Network] 객체 리플리케이션 리플리케이션은 객체의 상태를 한 호스트에서 다른 호스트로 복제 전달하는 것입니다. 직렬화를 하기 전 리플리케이션을 하기 위해 호스트는 다음의 준비 작업이 필요합니다. 1. 패킷 1. 패킷에 객체의 상태를 담은 패킷이라고 표기 리플리케이션이 아닌 다른 목적으로도 통신을 할 수 있기 때문에, 아래의 열거자를 사용해 패킷의 종류를 확인할 수 있게 합니다. // PT_HELLO : 관례로 호스트가 서로 접속하면 맨 처음에 일종의 '인사' 패킷을 주고받는 것입니다. // PT_ReplicationData : 데이터를 리플리케이션 하겠다는 것입니다. // PT_Disconnect : 연결 해제 절차를 요청하는 것입니다. // PT_MAX : 패킷 종류 열거형의 최댓값입니다. enum pakcetType { PT_H.. [C++/Network] 객체 직렬화 직렬화(serialization)란 어떤 객체가 랜덤 액세스(random access) 가능한 현태로 메모리상에 존재할 때, 이를 일련의 여러 비트로 변환해 길게 나열하는 것입니다. 외부의 시스템이 이용할 수 있는 포맷으로 변환하는 작업이라고 할 수 있습니다. 직렬화 직렬화가 필요한 이유는, 아래와 같은 플레이어 상태에 대한 클래스 PStatus가 있다고 해보겠습니다. 이를 직렬화 없이 다른 호스트로 전송을 한다면 다음과 같은 방법으로 전송을 할 것입니다. class PStatus { public: PStatus() { hp = 10; mp = 10; } private: int hp; int mp; }; void send_obj(SOCKET s, const PStatus* ps) { send(s, rei.. [C++/Network] UDP 소켓과 TCP 소켓 [이전 글] [C++/Network] Berkeley Socket (버클리 소켓) 소켓을 만들어 바인딩하는 과정까지 진행했습니다. 이번에는 UDP 소켓과 TCP 소켓을 만들어보도록 하겠습니다. UDP 소켓 UDP 소켓은 연결을 유지하지 않고도 데이터를 보낼 수 있습니다. 소켓은 호스트마다 하나의 소켓만 있으면 데이터를 주고받을 수 있지만, 신뢰성을 보장할 수 없습니다. UDP 소켓은 만든 즉시 데이터를 보낼 수 있습니다. 바인딩 되어있지 않다면, 네트워크 모듈이 자동으로 포트를 찾아 바인딩해줍니다. 데이터를 보낼 때 사용하는 함수는 sendto 입니다. // sock : 데이터그램을 보낼 소켓입니다. 바인딩되지 않았다면 라이브러리가 자동으로 바인딩해줍니다. // 이 때 바인딩한 주소와 포트는 발신자 주소.. [C++/Network] Berkeley Socket (버클리 소켓) [이전 글] [Network] TCP/IP 스택과 네트워크의 계층 구조 네트워크 프로그래밍에서 빠질 수 없는 것이 바로 소켓입니다. 소켓은 버클리 대학에서 만들어져 Berkeley Socket 이라는 이름으로 BSD 운영체제(특히 UNIX)에서 처음 배포되었습니다. 그랬던 것이, 오늘날 네트워크 프로그래밍의 사실상의 표준으로 자리매김했습니다. 네트워크 통신을 위해 프로세스는 실행 도중에 하나 이상의 소켓을 만들고 초기화해 소켓 API로 제어합니다. 이렇게 만들어진 소켓으로 데이터를 읽고 쓰게 됩니다. 즉, 소켓은 데이터가 통신할 수 있도록 연결해주는 인터페이스라고 할 수 있습니다. 서론은 여기까지. 바로 소켓의 사용법을 알아보겠습니다. 0. 소켓 라이브러리 윈도우 운영체제에서는 C++로 소켓 프로그래밍을.. 이전 1 다음