목록네트워크 (6)
layered
5-1 에코 클라이언트의 완벽 구현! TCP는 전송되는 데이터의 경계가 없다. 스트림을 구성해서 전달하기 때문이다. 따라서 한 번의 send로 데이터를 보낼 때 내부적으로는 여러 개의 패킷으로 쪼개서 전달할 수도 있고, 이는 recv를 통해서 받을 때에도 마찬가지이다. 예를 들면 [안녕하세요!]를 보냈는데 실제로는 [안] [녕하] [세요!]로 쪼개서 보낼 수도 있다는 것이다. 이런 특성으로 인해 아직 수신 버퍼에 원하는 만큼의 데이터가 쌓이지 않았는데 그대로 읽어 버릴 수도 있기 때문에, 반복문을 돌려서 보낸 데이터의 길만큼 받도록 해야 한다. 다음과 같이 코드를 수정할 수 있다. int send_len = send(serv_sock, message, strlen(message), 0); // 보낸 데이..
Server.c #define _WINSOCK_DEPRECATED_NO_WARNINGS #include #include #include ; #include #include #define BUF_SIZE 1024 #pragma comment(lib, "Ws2_32.lib") void error_handling(const char*); int main() { WSADATA wsadata; if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) error_handling("WSAStartup() error!"); SOCKET serv_sock, clnt_sock; struct sockaddr_in serv_addr, clnt_addr; char message[BUF_SIZE + 1..

4-2 TCP 기반 서버, 클라이언트 구현 TCP 서버의 기본적인 함수 호출 순서 리눅스에서는 send/recv 대신 read/write를 사용하기도 한다. 윈도우에서는 send/recv만 사용할 수 있다. 윈도우에서 소켓은 closesocket()으로 닫는다. 메모 리눅스에서만 read/write는 파일을 다룰 때에도 사용하지만 send/recv는 소켓에서만 사용할 수 있다(대신 여러 옵션을 부여할 수 있다는 장점이 있다). 리눅스에서만 작동시키려면 read/write를 쓰고, 윈도우와의 호환성을 고려한다면 send/recv를 쓰는 것이 좋은 것 같다. 연결요청 대기상태로의 진입 소켓에 주소를 할당했다면, 이제 연결을 해도 된다고 알려야 한다. 즉, 소켓을 LISTENING 상태로 만드는 것이다. in..
3-1 소켓에 할당되는 IP 주소와 PORT 번호 인터넷 주소 Internet Protocol은 인터넷 상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값이다. 즉, 네트워크 상에서 컴퓨터를 잘 찾아가기 위한 주소라고 할 수 있다. IP 주소는 IPv4와 IPv6로 나뉘는데 둘의 차이점은 사용하는 바이트 수이다. 원래 사용하는 것은 IPv4인데, 인터넷이 워낙 규모가 커지다 보니 4바이트로는 한계가 있어 16바이트의 IPv6가 점점 도입되는 추세이다. IPv4 기준으로 IP 주소는 네트워크 주소와 호스트 주소로 나뉜다. 그래서 데이터는 네트워크(= 라우터)에 먼저 전송되고, 이 라우터에서 호스트로 전송하는 것이다. 메모 아주 간단하게 말하면 네트워크는 호스트와 라우터들의 집합이다. 호스트는 서버나 ..
프로토콜 Protocol 컴퓨터 상호간의 대화에 필요한 통신규약. 이렇게 말하면 조금 모호한 면이 있을 것이다. 간단하게 다음과 같은 상황이 있다고 생각해 보자. 컴퓨터들이 서로 통신을 하려고 한다. 몇 가지 물음표가 떠오를 것이다. What is communicated How it is communicated When it is communicated 이런 것들을 상호간에 정하는 게 바로 프로토콜이다! 이제 소켓을 생성하는 함수를 다시 살펴보자. int socket(int domain, int type, int protocol); SOCKET socket(int af, int type, int procotol); domain, af 소켓이 사용할 프로토콜 체계(Protocol Family) 정보를 전달..
과제하면서 공부하는 거라 틀린 내용 있을 수 있음.. 소켓 Socket 서로 다른 두 컴퓨터가 데이터를 주고받을 수 있게 하려면 어떻게 해야 할까? 일단 두 컴퓨터를 어떤 식으로든 연결해 줘야 하는데 이는 인터넷이라는 거대한 네트워크가 있으므로 해결이 된다. 그리고 이를 기반으로 데이터를 송수신하는 소프트웨어적인 방법을 고민해야 하는데, 이것도 운영체제에서 소켓이라는 것을 제공하므로 쉽게 풀린다. 그냥 네트워크 상에서 데이터를 주고받기 위해 필요한 것이 소켓이다! 정도로 이해하면 될 것 같다. 참고) 소켓이라는 표현은 전기를 공급받기 위해 소켓을 꽂는 것처럼, 데이터의 송수신을 위해 인터넷이라는 네트워크 망에 연결한다는 의미이다. 또는 네트워크를 통한 두 컴퓨터의 연결 자체를 뜻하기도 한다. 전화 받는 ..