윤성우 55

TCP/IP 소켓 프로그래밍 11장 내용 확인문제

1. 프로세스간 통신이 의미하는 바는 무엇인가? 이를 개념적으로, 그리고 메모리의 관점에서 각각 설명해보자 >개념적으로 프로세스간 통신은 두 프로세스 사이에서 데이터를 주고 받는 것을 의미한다.메모리의 관점에서 보면 이는 두 프로세스가 메모리를 공유하는 것으로 이해할 수 있다. 공유하는 메모리의 영역이 존재함으로써 프로세스 상호간에 데이터를 전달할 수 있기 때문이다. 2. 프로세스간 통신에는 IPC라는 별도의 메커니즘이 요구된다. 그리고 이는 운영체제에 의해서 지원되는 별도의 기능이다. 그렇다면 프로세스간 통신에 있어서 이렇듯 운영체제의 도움이 필요한 이유는 무엇인가? >IPC를 위해서는 공유되는 메모리가 필요한데, 프로세스간에는 메모리를 공유하지 않기 때문에 운영체제의 도움이 필요하다. 즉, 두 프로세..

OOP 단계별 프로젝트 10

[Account.h]#ifndef __BOUND_CHECK_ARRAY_H__#define __BOUND_CHECK_ARRAY_H__ template class BoundCheckArray{private: T *arr; int arrlen; BoundCheckArray(const BoundCheckArray &arr) //복사 방지 { } BoundCheckArray &operator=(const BoundCheckArray &arr) //대입 방지 { }public: BoundCheckArray(int len = 100); T &operator[](int idx); T operator[](int idx) const; int GetArrLen() const; ~BoundCheckArray();}; temp..

열혈 C++ 프로그래밍 13-2 문제

/*만약에 Chapter 11을 공부하면서 스마트 포인터도 공부를 했다면, 이문제를 반드시 해결하고 넘어가기 바란다.자! 그럼 문제를 제시하겠다. 우리는 앞서 Chapter 11에서 다음의 형태로 스마트 포인터를 정의하였다.class SmartPtr{private: Point *posptr;public: SmartPtr(Point *ptr) :posptr(ptr) { } Point &operator*() const { return *posptr } Point *operator->() const { return posptr; } ~SmartPtr() { delete posptr; }};이 스마트 포인터를 템플릿으로 정의하여, 어떠한 클래스의 객체도 참조할 수 있는 포인터가 되게하자.그리고는 아래의 Poin..

열혈 C++ 프로그래밍 13-1 문제

[1번 문제]/*인자로 전달되는 두 변수에 저장된 값을 서로 교환하는 SwapData라는 이름의 함수를 템플릿으로 정의해보자.그리고 다음 Point 클래스를 대상으로 값의 교환이 이뤄짐을 확인할 수 있도록 main 함수를 구성해보자class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0) :xpos(x), ypos(y) { } void ShowPosition() const { cout

OOP 단계별 프로젝트 9

[Account.h]/* 우리가 정의한 Account 클래스는 생성자에서 문자열을 동적 할당하기 때문에, 소멸자 그리고 깊은 복사를 위한 복사생성자와 대입 연산자가 정의되어 있다. 그런데 이번에 적용할 String 클래스는 메모리 공간을 동적 할당하고, 깊은 복사를 진행하는 형태로 복사생성자와 대입 연산자가 정의되어 있기 때문에, 이를 이용하면 Account 클래스의 구현이 한결 간단해진다. 조금 더 자세히 설명하면, Account 클래스의 생성자 내에서의 동적 할당이 불필요해지며, 이로 인해서 직접 정의한 소멸자와 복사 생성자 그리고 대입 연산자가 모두 불필요해진다. 바로 이러한 사실을 확인하고 다음의 결론을 스스로 내리는 것이 이번 프로젝트의 핵심이라 할 수 있다. "적절한 클래스의 등장은 다른 클래..

OOP 단계별 프로젝트 8

[Account.h]/* Account 클래스는 깊은 복사를 진행하도록 복사 생성자가 정의되어 있다. 따라서 대입 연산자도 깊은 복사가 진행되도록 정의하는 것이 좋다. 그리고 AccountHandler 클래스에는 배열이 멤버로 선언되어서 객체의 저장을 주도 하는데, 이를 이번 Chapter에서 정의한 BoundCheckPointPtrArray 배열 클래스로 대체하고자 한다. 물론, 이를 위해서는 약간의 수정이 필요하며, 클래스의 이름도 적당히 변경해야할 필요가 있다. 실제 변경이 발생하는 헤더파일과 소스파일은 다음과 같다 Account.h Account.cpp-> 대입 연산자의 정의 AccountHandler.h-> BoundCheckPointPtrArray 클래스의 적용 따라서 이들 파일에 대한 버전정..

열혈 C++ 프로그래밍 11-1 문제

[1번 문제]/*Chapter 07에서는 예제 HASComposite.cpp를 통해서 다음의 두 클래스를 정의하였다(완전한 클래스의 정의는 예제 참고)class Gun{ ....} class Police{private: int handcuffs; //소유한 수갑의 수 Gun *pistol; //소유하고 있는 권총public: ....}이에 Police 클래스를 대상으로 깊은 복사가 이뤄지도록 대입 연산자와 복사 생성자를 동시에 정의하고 이의 확인을 위해 main 함수도 적절히 정의해보자*/ //HasComposite.cpp/*#include #include using namespace std; class Gun{private: int bullet; //장전된 총알의 수public: Gun(int bnum..

TCP/IP 소켓 프로그래밍 1~5장 함수 복습

[리눅스 소켓 생성 함수]#include int socket(int domain, int type, int protocol);->성공시 파일 디스크립터, 실패 시 -1 반환 *domain:소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달*type:소켓의 데이터 전송방식에 대한 정보 전달*protocol:두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달 [리눅스 소켓에 주소정보 할당하는 함수]#include int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);->성공시 0, 실패시 -1 반환 *sockfd:주소정보를(IP와 PORT를) 할당할 소켓의 파일 디스크립터*myaddr:할당하고자 하는 주소정보를 지니는 구조체 변수의..

TCP/IP 소켓 프로그래밍 9장 내용 확인문제

1. 다음 중 Time-wait 상태에 대해서 맞게 설명한 것을 모두 고르면? >b. 연결종료의 Four-way handshaking 과정에서 먼저 FIN 메세지를 전달한 소켓이 Time-wait 상태가 된다. *틀린 내용 a.Time-wait 상태는 서버 프로그램에서 생성한 소켓에서만 발생한다. ->소켓의 Time-wait 상태는 클라이언트냐 서버냐에 상관없이 존재한다. 먼저 연결의 종료를 요청하면 해당 소켓은 반드시 Time-wait 상태를 거친다. 하지만 클라이언트의 Time-wait 상태는 신경을 쓰지 않아도 된다. 왜냐하면 클라이언트 소켓의 PORT번호는 임의로 할당되기 때문이다. c.연결요청 과정에서 전송하는 SYN 메세지의 전송순서에 따라서 Time-wait 상태는 연결종료와 상관없이 일어날..