ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [열혈 TCP/IP 소켓 프로그래밍] Chapter1. 내용 확인문제
    Study/Network 2022. 9. 15. 20:25

    01. 네트워크 프로그래밍에서 소켓이 담당하는 역할, 소켓이라는 이름이 붙은 이유

    • 물리적으로 연결된 네트워크망에서 두 컴퓨터간 데이터 송수신을 담당하는 소프트웨어적 장치
    • 소켓이라는 이름이 붙은 이유는, 네트워크망에 '연결'하는 역할을 맡기 떄문

    02. 서버 프로그램에서 listen()과 accept() 함수의 역할

    • listen() 을 통해 연결 요청을 받아들일 수 있는 상태가 되고
    • accept() 를 통해 들어온 연결 요청을 수락해 데이터를 주고받는다.

    03. 리눅스에서는 파일 입출력을 소켓 기반 데이터 입출력에서 활용 가능하지만 윈도우는 아닌 이유

    • 리눅스에서는 파일과 소켓을 같은 파일 디스크립터로 관리하지만 윈도우에서는 소켓 핸들과 파일 핸들을 구분하기 떄문

    04. 소켓 생성 이후 주소할당이 필요한 이유

    • 네트워크 상에서 소켓을 구분하기 위한 역할을 하는 것이 주소이기 때문

    05. 리눅스의 파일 디스크립터와 윈도우의 핸들이 의미하는 바를 소켓을 대상으로 설명

    • 파일 디스크립터와 윈도우 핸들 모두, OS에서 소켓을 관리하기 위해 부여한 정수값이다.

    06. 저수준 파일 입출력 함수와 ANSI 표준 파일 입출력 함수의 차이

    • 저수준 파일 입출력 함수는 OS상에서 제공하는 파일 입출력 함수이다. 따라서 운영체제마다 다른 함수를 사용해야 한한다.
    • ANSI 표준 입출력 함수는 C에서 제공하는 함수이기 떄문에 OS에 상관없이 사용할 수 있다.

    07. 각각 저수준 파일 입출력 함수와 ANSI 표준 입출력 함수를 사용하여 복사 프로그램을 작성하라

    int GetLen(const char* str)
    {
    	int i = 0;
    	while (str[i] != '\0')
    	{
    		++i;
    	}
    	return i;
    }
    
    // 저수준 입출력
    void CopyLow(const char* src, const char* dst)
    {
    	int fd, fd2;
    	char buf[100];
    
    	fd = _open(src, O_RDONLY | O_TEXT);
    	fd2 = _open(dst, O_WRONLY | O_CREAT | O_TEXT, S_IWRITE);
    
    	if (fd == -1 || fd2 == -1)
    	{
    		printf("Invalid File");
    		exit(1);
    	}
    
    	int err = 0;
    	while (!_eof(fd))
    	{
    		err = _read(fd, buf, sizeof(buf));
    		if (err == -1)
    		{
    			printf("_read error");
    			exit(1);
    		}
    
    		int len = GetLen(buf);
    		_write(fd2, buf, len + 1);
    	}
    
    	_close(fd);
    	_close(fd2);
    }
    
    // ANSI 표준 입출력
    void CopyANSI(const char* src, const char* dst)
    {
    	FILE* rfp = nullptr;
    	FILE* wfp = nullptr;
    
    	fopen_s(&rfp, src, "r");
    	fopen_s(&wfp, dst, "w");
    
    	if (rfp == nullptr || wfp == nullptr)
    	{
    		printf("fopen err");
    		exit(1);
    	}
    
    	char ch;
    	while (!feof(rfp))
    	{
    		ch = fgetc(rfp);
    		fputc(ch, wfp);
    	}
    
    	fclose(rfp);
    	fclose(wfp);
    
    	return;
    }

    댓글

GameDev.