본문 바로가기

소켓 프로그래밍

(7)
2) 에코 서버 에코서버란 클라이언트가 전송해주는 데이터를 그대로 되돌려 전송해 주는 기능을 가진 서버를 말한다. 에코 서버 클라이언트 모델의 특징은 몇 바이트를 송수신할 것인지 예상할 수 있다는 것이 큰 특징이다. 그 이유는 전송한만큼 바이트를 되돌려 받기 때문이다. 서버 프로그램의 구현 과정 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 #include #include #pragma comment(lib, "ws2_32..
* Iterative 서버 https://developer-jun.tistory.com/11 위의 과정에서 Hello World 서버 프로그램을 구현해보았다. 그렇지만 클라이언트가 한 번 접속한 후 바로 종료가 되어버린다. 이러한 서버는 우리가 생각한 서버가 아니다. 위의 과정에서는 어떤식으로 서버와 클라이언트가 데이터를 송수신하는지 배워왔다. 이번에는 클라이언트가 여러번 접속을 하여도 종료가 되지않는 서버를 배워보자. 위의 흐름도를 살펴보면 적절한 송수신 이후 클라이언트의 연결을 종료한 후 accept() 함수를 호출하기 전으로간 후 루프문을 돌리고 있다. 이것이 핵심이다. 아래의 코드를 보자. 클라이언트 코드는 Hello World 서버의 코드와 동일하기 때문에 그대로 사용하면 된다. 1 2 3 4 5 6 7 8 9 10 11..
* TCP / IP 4계층 TCP는 Transmission Control Protocol의 약자로 "전송 과정을 컨트롤한다."라는 의미가 있다. 전송 과정을 컨트롤한다라는 것이 무엇인지 알아보자. TCP를 이해하기 위해서는 "TCP / IP 프로토콜 스택"이라는 것이 있는데 아래의 그림을 보자. 크게 4가지의 영역이 나누어져 있다. 미처 신경 쓰지 못했지만 데이터의 송수신은 소프트웨어만으로 해결이 될 수 있는 문제가 아니다. 어느 정도 하드웨어의 시스템이 구축이 되어있어야 하고 많은 필요한 문제들이 존재한다. 따라서 이러한 문제들을 하나의 프로토콜의 설계로 해결하는 것이 아닌 작은 문제로 해결이 되어야 한다. 그래야 효율적으로 문제들을 해결할 수 있기 때문이다. 그렇기 때문에 프로토콜 스택은 위와 같은 4가지의 영역 별로 세분화되..
* 바이트 순서 먼저 바이트 순서라는 것은 시스템이 내부적으로 데이터를 표현하는 방법을 말한다. 크게 두 가지의 방식으로 나뉘는데 리틀 엔디안(Little-Endian)과 빅 엔디안(Big-Endian)이다. 0x12345678을 두 가지 방식으로 표현해보자. 빅 엔디안 : 상위 바이트의 값(왼쪽에 있는 1)이 메모리상에 먼저(번지수가 작은 위치) 표시되는 방법을 말한다. 리틀 엔디안 : 하위 바이트의 값(오른쪽에 있는 8)이 메모리상에 먼저(번지수가 작은 위치) 표시되는 방법을 말한다. 시스템이 내부적으로 데이터를 처리하는데 있어서 어떠한 방식을 사용하는지는 CPU에 따라 다르다. 이를 "호스트 바이트 순서(host byte order)"라고 하는데 CPU마다 다른 문제로 일정하지 않다는 것이 문제가 된다. 바이트 순..
* 주소 체계와 데이터 설정 IP주소 인터넷상에 존재하는 호스트들을 구분하기 위한 32비트의 주소 체계를 의미한다. 일반적으로 점이 찍힌 십진수 표현 방식으로 IP주소를 표현하는데 점에 의해 구분 되는 각각의 십진수 값은 1바이트로 표현이 되며 총 4바이트를 사용하게 된다. IP주소는 인터넷에 연결되어 있는 컴퓨터를 구분하기 위해 사용된다. ex) "212.421.222.123" Port IP주소로는 인터넷에 연결되어 있는 컴퓨터를 구분할 수 있지만 컴퓨터 안에서 실행되고 있는 프로그램까지는 구분하여 줄 수 없다. 그렇기 때문에 어떠한 프로그램에게 전달하여야하는지 필요로 하는 정보가 있는데 이때 사용되는 것이 Port이다. Port는 2바이트로 표현이 되는데 0에서 65535까지의 범위의 값으로 사용이 된다. 하지만 0부터 1023..
* 소켓의 생성과 프로토콜 소켓의 생성과 프로토콜의 정의를 정확하게 이해해보자. 현실세계에도 여러 가지 통신 방법이 존재한다. 편지 또는 전화기 등등.. 하지만 한쪽에서는 편지를 보내고 한쪽에서는 전화를 사용한다는 것은 정상적인 통신이 되지 않을 것이다. 이렇듯 네트워크 상에서도 통신에 대한 약속이 필요한데 이것을 프로토콜이라 한다. 정확하게 정의를 보면 "컴퓨터 간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속"이다. 먼저 소켓의 할당을 보자. socket(_In_ int af, _In_ int type, _In_ int protocol); 1인자 : 생성할 소켓이 통신을 하기 위해 사용할 프로토콜 체계(Protocol Family)를 설정 2인자 : 소켓을 전송함에 있어서 사용하게 되는 전송 타입을 설정 3인자 : 두 호..
1) Hello World 서버 네트워크 프로그래밍이란 "멀리 떨어져 있는 호스트들이 서로 데이터를 주고받을 수 있도록 프로그램을 구현하는 것이다. 소프트웨어 차원에서 호스트들 간에 연결을 위한 장치가 필요한데 이러한 기능을 해주는 장치가 소켓(socket)이다. 그래서 일반적으로 네트워크 프로그래밍과 소켓 프로그래밍은 같은 의미로 사용된다. 소켓은 다소 추상적인 개념으로 사용되는 단어이다. 하지만 전화기를 빗대어 생각하자. 전화기도 멀리 떨어져 있는 두 사람이 통신을 하기 위한 도구이다. 소켓도 소프트웨어적으로 멀리 떨어져 있는 두 개의 호스트(host)를 연결해주는 매개체이다. 실생활에서 전화기가 필요하듯이 네트워크 프로그래밍에서도 소켓이 필요하다. 이제부터 간단하게 "Hello World!"를 출력하는 프로그램을 만들 것이다. 서..