Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- selinux port 등록
- regex_search
- linux시간으로 변경
- c3 second
- 정규식 문자열 출력
- python os
- 정규식 컴파일
- gcc regex
- gcc 업데이트
- c3 축 가리기
- telegraf
- snmp
- g++ 업데이트
- CentOS7
- 정규식 활용
- semanage
- influxdb 설치
- snmp test
- subporcess path
- c3 축 없애기
- 백준
- 1697
- c3 초
- c++ 정규식
- python popen
- grafana dashboard
- c3 step graph
- python subprocess
- InfluxDB
- centos pyhon 설치
Archives
- Today
- Total
리셋 되지 말자
[윤성우의 열혈 tcp/ip 소켓 프로그래밍] 내용 확인문제 본문
Ch1
1. 네트워크 프로그래밍에서 소켓이 담당하는 역할은 무엇인가? 그리고 소켓이라는 이름이 붙은 이유는 어디에 있는가?
- 소켓은 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치이다.
- 가전기기의 소켓은 전력망으로의 연결에 사용된다. 마찬가지로 멀리 떨어져있는 컴퓨터와 데이터를 송수신하려면 인터넷이라는 네트워크 망에 연결해야 한다.
- '소켓'은 네트워크 망의 연결에사용되는 도구이다. 이렇듯 연결이라는 의미가 담겨있어서 '소켓'이라는 표현을 사용한다.
2. 서버 프로그램에서는 소켓생성 이후에 listen 함수와 accept함수를 차례대로 호출한다. 그렇다면 이들의 역할은 각각 무엇인지 비교해서 설명해보자.
-listen 함수 : 소켓을 연결 가능한 상태로 만든다.
-accpetn 함수 : 데이터의 송수신을 위해 연결요청을 해오면, accept함수호출을 통해 그 요청을 수락한다.
3. 리눅스의 경우 파일 입출력 함수를 소켓 기반의 데이터 입출력에 사용할 수 있다 .반면 윈도우에서는 이것이 불가능하다. 그렇다면 리눅스에서는 가능하고,윈도우에서는 불가능한 이유가 무엇인가?
-리눅스에서는 소켓을 파일의 일종으로 구분한다. 따라서 파일 입출력 함수를 소켓 입출력에, 다시 말해서 네트워크상에서의 데이터 송수신에 사용할 수 있다. 반면 윈도우는 리눅스와 달리 파일과 소켓을 구분하고 있다. 때문에 별도의 데이터 송수신 함수를 참조해야한다.
4. 소켓을 생성한 다음에는 주소할당의 과정을 거친다. 그렇다면 주소할당이 필요한 이유는 무엇이며, 이를 목적으로 호출하는 함수는 또 무엇인가?
-소켓에 IP주소와 포트번호를 할당하기 위해서 bind함수를 호출하여 사용한다.(소켓에 주소정보를 할당한다.)
5. 리눅스의 파일 디스크립터와 윈도우의 핸들이 의미하는 바는 사실상 같다. 그렇다면 이들이 의미하는 바가 무엇인지 소켓을 대상으로 설명해보자.
-소켓을 구분하기 위한 번호를 부여하는 것이다.
6. 저 수준 파일 입출력 함수와 ANSI 표준에서 정의하는 파일 입출력 함수는 어떠한 차이가 있는가?
-저 수준 파일 입출력 함수는 해당 운영체제 에서만 동작하는 함수이고, ANSI 표준에서 정의하는 파일 입출력 함수는 운영체제에 상관없이 동작하는 함수이다.
-저 수준 파일 입출력 함수는 운영체제마다 형태가 다르다.
-ANSI 표준에서 정의하는 파일 입출력 함수는 C의 표준이다.
7. 본문에서 보인 예제 low_open.c와 low_read.c를 참조하여 파일 복사 프로그램을 작성하되, 저 수준 파일 입출력 함수를 기반으로, 그리고 ANSI 표준 입출력 함수를 기반으로 각각 한번씩 작성해보자. 그리고 복사 프로그램의 사용법은 여러분이 임의로 결정하기 바란다.
file1.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> #include <fcntl.h> #include <unistd.h> #define BUF_SIZE 80 int main(int argc, int argv[]){ int file1, file2; char buf[BUF_SIZE]; int read_cnt; file1 = open("file1.txt", O_RDONLY); //읽기 전용 file2 = open("file2.txt", O_CREAT | O_WRONLY | O_TRUNC); //파일 생성, 쓰기전용, 내용이 있다면 내용 다 지우기 if (file1 == -1 || file2 == -1){ puts("file open error"); return 0; } while ((read_cnt = read(file1, buf, BUF_SIZE)) != 0) write(file2, buf, read_cnt); //file1에서 읽어들여 file2에 복사 close(file1); close(file2); return 0; } | cs |
file2.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> #define BUF_SIZE 80 int main(void){ char buf[BUF_SIZE]; int read_cnt; FILE *file1 = fopen("file1.txt", "rb"); //읽기전용 FILE *file2 = fopen("file2.txt", "wb"); //쓰기전용 if (file1 == NULL || file2 == NULL){ puts("file open error"); return -1; } while (1){ read_cnt = fread((void*)buf, 1, BUF_SIZE, file1); //읽어오고 if (read_cnt < BUF_SIZE){ if (feof(file1) != 0){ fwrite((void*)buf, 1, read_cnt, file2); break; } else puts("copy error"); break; } } fclose(file1); fclose(file2); return 0; } | cs |
'socket' 카테고리의 다른 글
[윤성우의 열혈 tcp/ip 소켓 프로그래밍] 내용 확인문제(ch2) (0) | 2020.04.13 |
---|---|
[ch2] client 소스 2개 (0) | 2020.04.13 |
윈도우 기반 서버, 클라이언트 예제 작성(동작함) (0) | 2020.04.06 |
window socket 프로그래밍 (0) | 2020.04.06 |
socket api 파일들... (0) | 2020.04.06 |
Comments