전화받는 소켓의 구현
-서버
소켓 생성 socket()
주소설정 bind : ip 어떤 컴퓨터 인지 찾는거, port 어떤 프로그램인지 찾을 때 (소켓을 찾을 때)
연결 요청 대기 상태 : 연결 요청이 들어왔을 떄 수락할 수 있는 상태 —> listen()
연결 요청에 대해 수락 : accept
—————-socket———————
연결 지향형 - tcp : 한번 연결되면 연결 유지 됨 (socket_stream)
특 )
중간에 소멸 ㄴ
전송 순서대로 수신
데이터 경계 존재 ㄴ —> 송신횟수랑 수신횟수랑 일치하지 않아도 됨
소켓 대 소켓 = 1 : 1
비연결 지향형 -udp : 연결 유지 ㄴㄴ (socket_dgram)
특 )
순서 상관 ㄴ 빠른전송 지향
데이터 손실 우려 ㅇ 파손 우려 ㅇ
데이터의 경계가 존재 —> 송신횟수 == 수신횟수
한번에 전송할 수 있는 데이터 크기 존재
Socket(PF_INEF, 연결/비연결, IPPROTO_TCP) <— 마지막거는 0으로 쓰면 됨
——————————bind—————————————-
sockaddr_in에 뭐가 들어가는 지만 알면 됨
Sin_family —> 주소 체계
sin_port —>
Sin_addr —> ip주소
INAEER_ANY 컴퓨터 ip주소 자동 할당해줌
gcc 컴파일 하라
./서버명 포트번호
argv[1] —> 사용자가 입력한 문자열 중 두번쨰꺼
atoi로 문자열을 정수로 변환
왜 강제형변환을 했는가?
- 바인드가 부르고 있는 구조가 불편한 구조로 되어있어서 swrv_addㅂr을 만들어 강제형변환해줌, 타입이 달라서
memset : 0으로 초기화 후 데이터 넣기
————————listen———————-
큐만든다
서버가 받ㄷ을 수 있는 상태니 리슨 후에 연결함수가 들어와야 함
빅 : 차례대로
리틀 : 반대로
컴퓨터마다 달라서 네트워크 바이트 순서 규약 —> (빅엔디안0을 사용함
쇼트ㅡ는 포트
롱은 아이피
htonl —> 로스트에서 네트로 아이피 데이터를 저장하는 방식을 변환해서 보냄
Htons —> 호스트에서 네트로 포트 변환
ntohl —> 네트에서 호스트로
———————-accept————————-
클ㄹ언트 소켓이 생성됨
서버 | 클라이언트
소켓
바인드
리슨 | 소켓 실행
| 커넥트 실행
accept
——————-멀티프로세스————————-
부모 프로세스 100번. 아이 프로세스 101번
코드는 똑같음
fork—> 똑같은 코드가 (실행되는 시점까지 ) 아이프로세스에 생성됨
pid에 담음 ( 동시에)
pid에는 자식 아이디가 들어감(101번). | 자식 pid에는 0이 들어감
결과값 뽑는거 해보기
좀비 프로세스
종료 / 죽는다
종료 : exit, return
안죽고 종료만 되면 그게 좀비
좀비 죽이는 방법
wait / waitpid / 시그널핸들링
- wait
WIFEXITED(status) 정상 종료한 자식이 있니?
WEXITSTATUS 자식 프로세스의 전달 값을 반환.
정상 종료한 자식이 있고 그 프로세스의 전달값을 반환 받으면 자식을 죽임
부모가 자식이 종료될 때 까지 기다림. —> 자식이 종료될때 까지 보모는 블로킹 현상에 빠짐
- waitpid
블로킹현상에 빠지지 않음
- 시그널 핸들링
자식이 죽는 순간 시그널이 발생 os가 부모에게 알려줌
시그널 신호를 받으면 자식을 죽임
시그널 받기 전까지 딴짓을 할 수 있음.
쓰는 법 알아두기 *** 코드를 쓸 수 있어야 함
'Life > 웹프로그래밍과 (KDMH WP17)' 카테고리의 다른 글
코로나 등교개학 고3 생활3 in 디미고 (2) | 2020.07.28 |
---|---|
데이터베이스 프로그래밍 정리 / 디미고 (0) | 2020.07.28 |
코로나 등교개학 고3 기숙사학교 생활2 in 디미고 (0) | 2020.05.29 |
등교개학 기숙사학교 고3 일상 - 한국디지털미디어고등학교 (0) | 2020.05.27 |
화학1 (0) | 2019.07.11 |