소켓 프로그래밍이란... OS 자체에서 지원하는 네트워크 함수를 이용하여 소켓처럼 연결하여 사용하게 되는 것이다. 함수 이름 또한 소켓이다.

간단히 사용되는 함수 몇 개를 눈에 익혀 보겠다. 네트워크 이다 보니 서버가 있어야 하고 클라이언트가 있어야 할 것이다.

우선 서버쪽 함수 부터 보겠다.

socket(....), bind(....), listen(.....), accept(...), recv(....), send(.....)가 있고 socket(...) 원하는 네트워크를 접속을 할 수 있도록 구조체 식별자를 반환하여 준다. 그럼 bind()를 사용하여 결속을 하고 listen()을 호출하여 클라언트가 들어와 주기를 기다린다. 클라이언트가 접속이 되면 accept()가 호출 되고 recv(), send()를 사용할 수 있게 되어진다. 간단히 이렇게 알아두고 클라이언트로 넘어가자.


클라이언트 함수...  socket(....), connect(....), send(...), recv(....), close(....) 가 있다.

socket()은 네트워크에 접속할 수 있는 콘넥터에 많이 비유된다. 실제로는 구조체를 반환 받아 식별자를 얻는다. 그럼 그 식별자로 우리는 쓰고자하는 네트워크를 찾을 수 있게 된다.

connect()는 말그대로 네트워크에 소켓에서 얻은 식별자를 사용하여 연결하는 것이고 그후 send(), recv()를 통하여 보내고 받는다. 그리고 사용이 끝났으면 close()를 하여 식별자를 반환한다.


여기까지는 어렵지 않게 이해될것이라 믿는다. 이제 서버와 클라언트의 연결 순서를 보자.

*서버 함수 호출 순서.(첨부 소스 참조)

  socket() ->  bind() ->  listen() -> accept() -> recv() or send() -> close()

*클라이언트 호출 순서.

  socket() -> connect -> send() or recv() -> close()


1. 서버쪽을 먼저 실행하고 그러면 socket()가 실행되고 bind()에 의하여 결속이 된 다음 listen()를 호출하여 클라언트가 들어오기를 기다린다.

2. 클라언트를 실행한다. 그러면 socket()를 처음으로 호출 시킨후 connect() 호출 의하여 서버에 접속한다.

3. 클라언트 접속이 확인이 되었으므로 listen()함수에서 넘어와 accept()를 호출한다.

4. 이제 서버와 클라이언트간의 순서에 상관없이 send(), recv()를 할 수 있다.

5. 마지막으로 서버와 클라이언트 모두 close를 하여 프로그램을 끝낸다.


소스 설명을 간략하게 하겠다.

소스는 리눅스용으로 코딩되어 있으며 윈도우용은 많은 수정은 아니나 약간의 수정은 불가피하다.

소스는 클라이언트에서 메세지를 타이핑하면 서버로 전송되는 간단한 메세지 전달 프로그램 정도 되겠다.

TCPMsgServer.c

서버용 소스

 
TCPMsgClient.c

클라이언트용 소스

출처 카페 > Micro Korea / 한국
원본 http://cafe.naver.com/microos/68
2006/05/12 02:12 2006/05/12 02:12
Trackback address :: http://4ellene.net/tt/trackback/860

Comments List

  1. cousin s lips 2008/05/23 04:31

  2. 嫄몄

Write a comment.

[로그인][오픈아이디란?]