728x90
반응형
p351
<프로그램 예제 : p11-9.c>
File Descriptor
- 운영 체제에서 파일을 사용할 때 각 파일에 대한 정보를 유지하는 기억 장치의 한 영역, 또는 그 정보. - 두산 동아
사실 제대로 이해를 못 해서 뭔가 주석을 달기가 참 어렵습니다.
정말 미안합니다. 보실 여러분들 알아서 댓글을 다시면서 서로 도와서 이해하도록 합시다.
여러번 듣고 또 들어도 도저히 나 나름대로 이해해서 설명할 수가 없네요~
(__)
그럼 이제 강선생님 수업시간에 배운 서버와 클라이언트로 넘어가 볼께요~
소켓은 호스트간 연결 도구로써, 네트워크 통신과 전화 통화의 예를 통해 소켓 통신 흐름의 이해를 돕고자 한다.
소켓은 전화기에 해당하는데, 수신자와 송신자, 클라이언트와 서버의 관계를 위의 그림을 보면 이해하기 쉬울 것이라 생각한다.
나머지 더 필요한 부연 설명은 내장형 하드웨어반 여러분들에게 맡깁니다.
네트워크 통신을 Linux상에서 C프로그래밍을 통해 할 수 있는데 위와 같다.
보다시피 서버측에서, 소켓생성은 socket()이라는 함수를 통해(얼마나 쉬운가? 발음그대로 소켓), 작성가능하고
주소할당은(여기서 주소 할당은 Port번호와 IP주소를 의미한다.)bind()함수를 사용한다. 연결대기에 해당하는 부분이 listen()이라는 함수로써, listen은 문자그대로 '듣다'이다. 따라서 '클라이언트의 요청을 듣겠다'라는 의미로 정말
함수명을 잘 지었다는 생각이 든다. 예전 두어달 쯤 전에 CM선생님 수업할 때 C프로그래밍에서 변수명을 선언할 때에 의미있는 변수를 써야, 나중에 긴 프로그램을 작성할 때에도 변수명때문에 헷갈리지 않고 코딩하기 쉽다고 설명했던 기억이 난다. 그만큼 이름은 중요하다. 각설하고 서버측에서 클라이언트의 접속을 허용할때 쓰는 함수는 accept()라는 함수이다. 일단 클라이언트의 접속을 허용하게 되면 필요에 따라 서버와 클라이언트측은 쌍방향 통신을 할 수 있다. 있다. 서버측에서 클라이언트측으로 정보를 보내게 된다면 혹은 쓰게 된다면 write()함수를 써야 하고
읽게 된다면 read()함수를 쓰면 된다. 이 때 보내는 쪽은 write(), 받는 쪽은 read()함수임을 잊지 말자.
반면에 클라이언트 측에서는 우선 소켓을 생성하고 서버에 접속을 요청하기 위해 connect()란 함수를 사용한다.
통신을 끊으려 할 때에는 close()란 함수를 쓰면 된다.
그러면 이제 실제로 프로그램을 작성한 것을 보기로 하자.
위 그림은 서버측 파일을 작성한 것이다.
윗 파일은 클라이언트측 파일을 작성한 것이다.
윗 그림은 보다시피 서버파일을 실행했을때, 즉, 클라이언트측에 정보를 제공하겠다는 의미로써, 클라이언트 파일을 실행하면 Hello World!라고 상냥하게 인사하는 것을 볼 수 있다.
이 때 주의할 것은 서버파일을 먼저 실행하지 않으면 클라이언트 파일을 실행해도 서로 통신이 되지 않는다는 점이다. 위의 소켓통신 흐름의 이해란 그림을 보면 이해하겠지만 클라이언트측에서 서버로 연결을 요청할 때 서버에서 수락을 하지 않으면 연결이 불가능하다. 서버 파일을 실행하지 않는단 의미는 곧 클라이언트의 서버측 연결요청을 서버측에서 수락하지 않겠단 말과도 같기 때문에 통신을 위해선 먼저 서버측 파일을 실행해야 한다.
728x90
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
[내장형]김정환 - 2011년 06월 30일 일일 보고서 (10) | 2011.06.30 |
---|---|
[내장형]김수만_2011년6월29일_수업내용 (22) | 2011.06.30 |
[내장형]김수만_포스트에 C Code를 웹브라우저에서 보기 좋게 삽입하기 (6) | 2011.06.28 |
[내장형]최남식-가입인사 (0) | 2011.06.28 |
[내장형]심재원-가입인사. (0) | 2011.06.28 |
[내장형]이상만_Socket API, 저수준 입출력, grep / redirection명령어, TCP/IP 서론 요약 (15) | 2011.06.27 |
[내장형]김정우 입니다. (0) | 2011.06.24 |
[내장형]윤병도 가입인사 (0) | 2011.06.24 |