반응형

1. 에서는 간략하게 서버 프로그램의 구현 순서를 살펴 보았죠.

이번에 할 것은 단순히 우리가 C언어를 배우면서 제일 처음에 햇던 "Hello World!"를 출력하는 프로그램...이 아니라

서버 프로그램으로 구현을 할것입니다.

아직 우리가 다루지 못한 많은것들이 있기때문에, 지금 당장 이것을 보고 이해하기는 힘들것이구요,

서버 프로그램의 구현 순서를 코드에서 살펴보고, 정말로 동작하는지 확인해보시기 바랍니다.

 

"Hello World!" 출력을 위한 서버코드

자세하게 소스 코드를 분석할 필요는 없습니다. socket 함수가 호출되고, bind 함수가 호출되고 listen 함수가 호출되고

그리고 나서 accept 함수가 호출되고, 마지막으로 write 함수 호출을 통해서 데이터를 전송하는 전체 흐름을 알아두시기 바랍니다. (write 함수 설명은 조금 뒤에 하겠습니다.)

 

클라이언트 소켓 구현의 이해

앞서 서버 프로그램을 전화와 비교 할 때 전화를 거는 함수에 대해서는 언급하지 않았습니다.

반대로 전화를 받는 accept 함수를 언급했었죠,

사실 일반적으로 서버는 전화를 먼저 걸지 않습니다. 다만 걸려오는 전화를 받아서 대화할 뿐이죠.

그러나 클라이언트 프로그램은 서버에게 먼저 전화를 걸어야 합니다.

 

이렇게 전화를 거는 기능의 함수가 connect 함수입니다.

성공 시 0을 리턴하고, 실패 시 -1을 리턴합니다.

 

이제 클라이언트 프로그램의 구현 순서를 정리해 봅시다. 크게 세가지로 나뉘어 지는데요,

첫번째, 서버에 접속하기 위해 소켓을 생성한다.

두번째, connect 함수의 호출을 통해 서버로의 접속을 시도한다.

세번째, 연결이 완료되면 데이터를 주고 받는다.

 

"Hello World!"를 출력하기위한 클라이언트 코드

이번에도 socket 함수와 connect 함수가 호출되는 부분만 확인을 하고, 서버 프로그램과 함께 실행을 해서 "Hello World" 메세지를 출력하는 것에만 신경을 씁시다.

 

이제 실제로 컴파일 하고 실행을 해보겠습니다.

우선 리눅스 창을 2개를 띄우시고

윗 창에 서버프로그램을 컴파일하고 한 포트를 정해서 실행시키자 대기상태로 들어가는것이 보이시죠?

지금 저 상태는 클라이언트의 응답을 받기위한 말그대로 대기 상태입니다.

뒤의 9314 는 포트 숫자로써 서버 프로그램과 클라이언트 프로그램의 포트를 같게 정해주면 됩니다.

포트의 정확한 설명은 뒤에서 하겠습니다.


 

그리고 클라이언트 프로그램을 실행하면, 서버로부터 Hello Wolrd! 메세지를 수신하고서 바로 종료하게 됩니다.

또한 서버프로그램도 종료된 것이 보이시죠?

그리고 클라이언트 프로그램때 전달한 IP주소 127.0.0.1은 우리의 로컬(Local) 컴퓨터를 의미하는 것입니다.

한대의 컴퓨터 내에서 서버와 클라이언트를 모두 실행시켰기 때문에 저런식으로 전달을 했습니다. 만약,

서버와 클라이언트를 각각 다른 컴퓨터에서 실행한다면 반드시 서버의 IP주소를 인자로 전달해야 합니다.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기