LAN을 위한 소켓 프로그래밍
LAN에 연결된 서로 다른 컴퓨터에서 데이터를 전송하고 데이터를 받는 소켓 프로그램을 구현해 보겠습니다. WIN32를 이용하여 소켓 프로그램을 만들 때는 다소 복잡하던 것이 MFC의 CAsyncSocket이 만들어짐으로써 매우 간단하게 구현할 수 있게 되었습니다.
윈도우에서 네트워킹을 할 수 있도록 하는 방법 중에 소켓이 가장 많이 활성화되어 있는 방법입니다. 이 방법을 익히고 나서 그 외 통신 프로토콜에 대하여 공부하면 많은 도움이 될 것 같습니다.
1.소켓
소켓(Socket)으로 데이터를 전송하고 데이터를 받는 데는 2가지 방법이 있습니다.
Stream Socket 방법과 Datagram Socket 방법입니다. Stream Socket 연결 방법은 서버가 실행되면서 클라이언트를 기다립니다. 이 때 클라이언트가 자신의 주소를 서버 프로그램에게 줍니다. 서버는 ID를 받고 클라이언트 컴퓨터에 접근하는 길을 설정합니다. 이렇게 함으로써 서버와 클라이언트가 완전히 온라인을 이루게 되어 통신이 시작되는 것입니다. Datagram Socket 연결 방법은 한 컴퓨터가 어떤 데이터를 담아서 특정 컴퓨터 IP 주소로 무조건 보내는 겁니다. 즉 상호 온라인 연결을 하지 않은 상태에서 무조건 상대 컴퓨터 IP 주소로 데이터가 달려가는 것이지요. 이렇게 하여 상대방 컴퓨터에 도달하는 방법입니다. Datagram Socket 방법은 데이터에 순차성이 없습니다. 그러니까 1번 데이터, 2번 데이터, 3번 데이터를 차례대로 특정 컴퓨터에 보낼 때 들어오는 데이터가 1번, 2번, 3번 이렇게 들어오는 것이 아니고 먼저 도착한 데이터가 먼저 들어오기 때문에 1, 3, 2 또는 3, 2, 1 등 순서가 마구 바뀌어서 들어올 수 있습니다. 그렇기 때문에 Datagram Socket은 데이터 헤더에 보내는 데이터의 몇 번째 블록이라는 것을 설정해 주고 상대 컴퓨터에 전송해야 합니다.
반면 Stream Socket은 온라인으로 연결되어 있는 상태에서 데이터를 보내기 때문에 1, 2, 3 순서로 데이터를 보내면 1, 2, 3 순서로 데이터를 받습니다.
※ Stream Socket은 순차적, Datagram Socket은 비순차적으로 데이터 수신
Datagram Socket 방법은 서버가 많은 컴퓨터에 데이터를 전송할 때 사용하기에 편리한 방법입니다. 데이터를 완전하게 그리고 정확하게 보내기 위해서는 Stream Socket 방법이 낫다고 봅니다. 윈도에서 제공하는 Socket은 위의 두 가지 방법을 모두 사용할 수 있습니다. 여기서 사용하는 방법은 Stream Socket 방법입니다. 데이터를 정확하게 보내는 데 중요점을 둔 것입니다.
<1>소켓 프로그래밍 이란
소켓을 통해서 서로 통신을 하고자 할경우 LAN이 연결되어 있어야 합니다.(Localhost(127.0.01)로 PC내부에서도 서버와 클라이언트가 존재하고 실행될 수 있습니다.) 또는 전화접속 네트워킹을 통해서 가상적 형태의 LAN 이 연결되었을때만 가능한 프로그래밍입니다. 그럼 도대체 LAN이 연결되었을때가 무엇이며 이때 프로그래밍하는 것이 무엇인가? 이부분을 알기 위해서는 네트워킹에 대한 간단한 이론을 알아야 합니다. 통신이란 상호 대화를 의미합니다. 즉 이쪽에서 말하는 내용을 저쪽에서 듣고 어떤 내용인지 알고 대화하는 것을 통신이라고 합니다. 사람들이 서로 통신할때 언어가 같아야 서로 이해할수 있습니다. 한쪽에서는 한국말을 사용하는데 다른 한쪽에서는 영어를 사용한다면 서로 대화가 통하지 않습니다. 같은 언어를 사용하는 사람들끼리 서로 언어가 통하는 것입니다. 컴퓨터에서도 서로 통신을 할때 서로 같은 언어를 사용해야 합니다. 컴퓨터에서 통신할때 사용하는 언어를 프로토클이라고 합니다. 이프로토클이 같아야 서로 함께 통신을 할수 있는 것입니다. 이런 프로토클이 여러개가 있습니다. 그중에서 광범위하게 많이 쓰이는 프로토클이 TCP/IP 입니다. 이프로토클을 이용하여 FTP,HTTPD,TELNET 같은 상위 프로토클이 만들어진것입니다. TCT/IP는 하부계층부터 물리적계층,인터넷 계층,트랜스포트 계층,어플리케이션 계층으로 4개의 계층으로 나누어져 있습니다. 여기에서 트랜스포트 계층과 인터넷계층, 물리적 계층들은 OS또는 시스템에서 처리해주며 윈도우즈 어플리케이션에서 프로그래밍을 할때는 어플리케이션 계층만 이용합니다. 이 어플리케이션 계층에서 프로그래밍하는 것을 소켓 프로그래밍이라고 합니다. 소켓 프로그래밍을 할때는 통신하고자 하는 상대방에 접근하고자 할때 IP와 포트 번호를 이용합니다. IP는 접속하고자 하는 상대방 컴퓨터의 주소입니다. LAN으로 연결을 하였을경우 각컴퓨터에는 자신의 IP가 할당되어 있습니다. 제어판에서 네트워크를 선택하고 등록정보를 선택하고 프로토클를 선택한후 TCP/IP 항목에 보시면 자신의 IP 주소를 확인하실수 있을것입니다. 이주소를 이용하여 상대방 컴퓨터에 접근하는 것입니다. 상대방 컴퓨터에 접근한후 해당 포트로 가상 통신선을 연결합니다. 만일 현재 연결하고자 하는 포트가 10번이라면 이번호로 접근을 한다는 의미입니다.
TCT/IP를 이용하여 통신하는 것중 많이쓰이는 통신 방법중에 FTP 와 텔넷 그리고 사용자가 만든 포트 번호를 이용하여 서버와 클라이언트가 서로 접속하는 형태를 나타낸 것입니다. TCP/IP를 이용하여 TELNET로 접속하고자 한다면 포트 번호를 23을 사용해야 합니다.그림 5-2-1과 같이 ⓐ라는 클라이언트 컴퓨터가 ⓑ라는 컴퓨터에 TELNET를 이용하여 접속하고자 한다면 두개의 정보를 전달합니다. 첫번째는 자신의 IP이며 두번째는 포트번호입니다. 이때 포트번호는 23이어야 합니다. 국제 규약에서 TELNET는 포트번호를 23으로 설정하였기 때문입니다. 그림 5-2-1에서 텔넷으로 ⓑ컴퓨터에 접속할때 ⓐ컴퓨터는 이렇게 말하는것과 같습니다. “나 210.112.136.3 IP를 가지고 있는 컴퓨터인데 포트 23으로 접속좀 하자!”
이때 ⓑ컴퓨터는 이에 이렇게 응답을 하는 내용을 간단한 예로 이야기 해보겠습니다. “210.112.136.3 컴퓨터 내컴퓨터 IP 210.112.236.1 의 포트 23으로 접속하는 것을 환영한다! 그런데 23포트는 TELNET라는 언어를 쓴다. 이언어에 응답하라 먼저 인삿말을 보낸다. 이인삿말에 대답을 해라! 쑬라쑬라!“ 만일 TELNET에서 서로 통신방법이 서버가 ”쑬라쑬라!“ 했을경우 클라이언트는 ”쌀라쌀라!“ 라고 대답을 해야 한다고 가정을 하였을때 접속하는 클라이언트 컴퓨터는 ”쑬라쑬라!“ 라는 내용을 받고 바로 ”쌀라쌀라!“ 해주어야 합니다. 이렇게 되면 서버에서 ”음 TELNET 언어를 알고 있구나 그럼 서로 통신하자!“ 이렇게 되는 것입니다.
결국 처음에는 IP와 포트 번호로 접속을 하고 연결이 되면 또다른 프로토클의 언어로 서로 통신을 해야 한다는 것입니다. TELNET로 통신을 하고자 한다면 TELNET 규약을 알아야 하며, FTP로 통신을 하고자 한다면 FTP언어를 알아야 합니다.
FTP 클라이언트 프로그램이나 또는 TELNET 접속같은 프로그램은 TCP/IP로 서버에 접속한다음 해당 프로토클로 서로 통신을 할수 있는 형태이며 FTP서버나 TELNET 서버 프로그램은 해당 포트를 열고 기다리고 있다가 통신을 하는 프로그램입니다. 이렇게 본다면 소켓 프로그램을 할줄알고 서로 통신하는 규약만 알면 TELNET서버나,클라이언트 또는 FTP서버나 클라이언트 프로그램을 작성할수가 있습니다. 즉 소켓 프로그래밍은 인터넷에서 서로 통신하는 HTTP,FTP,TELNET등의 클라이언트와 서버를 제작할수 있는 가장 기본적인 프로그램이 된는 것입니다.
'Robotics > Software Tech.' 카테고리의 다른 글
네트워크 영상/음성 전송 프로그램 (0) | 2007.11.20 |
---|---|
LAN을 위한 소켓 프로그래밍 #2 (0) | 2007.11.17 |
[MFC]Log파일 만들기 (0) | 2007.10.22 |
for문의 스코프 문제 (0) | 2007.09.29 |
Visual Studio 2005 msdn 사이트 (0) | 2007.09.20 |