시스템프로그래밍 Lecture11. network programming
- 최초 등록일
- 2015.01.04
- 최종 저작일
- 2013.06
- 8페이지/ 한컴오피스
- 가격 1,000원
소개글
수정할 곳 없는 정말 완벽한 보고서입니다.
보고서 쓰시는데 도움이 되었으면 좋겠습니다.
목차
Lecture11 : network programming
1) Try the client and server example. You have to adjust the IP and port number. Use a port number in [10000..65535].
2) Modify cli.c and serv.c such that they can talk until the client sends "bye".
3) Modify the code such that the client and the server can talk in any order. Use kill(pid, SIGTERM) to kill a process whose pid is "pid".
본문내용
먼저 vi인 텍스트에디터를 이용하여 다음과 같이 server.c와 client.c를 작성하고, 소스파일을 컴파일하고 실행하면 다음과 같이 출력됨을 볼 수 있다.
먼저 server를 실행시키면, 자신이 서버임을 나타낸 뒤, 소켓을 생성하고 생성된 소켓의 descriptor 값이 3임을 알려준다. 그 뒤 소켓에 설정을 부여한 뒤(bind) client의 연결을 기다린다. 이 때 client를 실행시키면, 클라이언트 역시 자신이 클라이언트임을 나타낸 뒤 소켓을 생성하고 생성된 소켓의 descriptor 값이 3임을 알려준 뒤 서버와 정상적으로 연결되었음을 알린다.
클라이언트에서 서버에 전송할 메시지를 입력하면(“Hi”), 서버에서는 이를 받은 뒤, 그 결과를 출력한다. 서버에서도 역시 클라이언트에 전송할 메시지를 입력하면(“Hello”), 클라이언트에서 이를 받은 뒤 그 결과를 출력하고 프로그램을 종료한다. 서버 역시 클라이언트에 메시지를 전송하면 이를 확인하고 프로그램을 종료한다.
<중 략>
server와 client 모두 fork()를 2번 이용하여 1번 자식은 상대편으로부터 입력을 2번 자식은 보내는 작업을 할 수 있도록 하였다. 부모 프로세스는 waitpid를 계속 반복하여 자식이 하나라도 죽으면 모든 자식을 죽이고 종료 될 수 있도록 하였고, waitpid는 wait와 같이 자식 프로세스의 종료를 기다리는 함수로 대신 WNOHANG을 이용하여 멈추지 않고 계속 다음을 진행하도록 하였다. 그리고 좀 더 채팅방에 가깝도록 scanf가 아닌 fgets를 이용하여 내용을 입력 받도록 수정하였다.
참고 자료
없음