목록분류 전체보기 (280)
나만의 작은 도서관

목차UDP echo 서버 만들기echo 서버에 데이터 전송해보기(Unconnected UDP)echo 서버에 데이터 전송해보기(Connected UDP)깃헙코드UDP echo 서버 만들기 이번에는 TCP가 아닌, UDP를 이용한 echo 서버를 만들어 보도록 하겠다. Winsock 초기화, 소켓 생성Winsock을 사용하려면 항상 초기화를 해줘야하기 때문에 Wincosk 초기화를 하고, 통신을 위한 소켓을 생성한다. 이부분은 TCP때에서 SOCK_STREAM -> SOCK_DGRAM 변경을 제외한 다른 부분은 동일하다.// Winsock 초기화WSAData wsaData; if (::WSAStartup(MAKEWORD(2, 2), &wsaDa..

목차echo 서버 만들기echo 서버에 데이터 전송해 보기send(), recv()의 특징깃헙 코드echo 서버 만들기echo 서버란 클라이언트가 전송해 주는 데이터를 그대로 되돌려주는 서버이다. echo 서버를 만들기 위해 클라이언트가 전송한 데이터를 받는 recv(), 받은 데이터를 재전송해 주는 send()를 순서대로 사용한다. +) 클라이언트, 서버 예제 코드들은 이전 글들에서 작성한 코드 위에서 작성되었다. 데이터 수신하기: recv()recv() 함수를 이용해 클라이언트가 전송한 데이터를 받는다. recv() 함수를 사용하기 위해서는 4가지 인자가 필요한데 각각 다음과 같다.recv( _In_ SOCKET s, _Out_writes_bytes_to_(len, return) __out..

개요서버는 마치 식당과도 같다. 식당에서 손님이 오면 손님을 받아 자리로 안내하는 것처럼 서버는 연결 요청을 한 소켓을 연결하고, 손님이 주문한 음식을 만들어 해당 자리에 서빙하는 것처럼, 요청한 작업을 처리하여 해당 소켓으로 처리된 데이터를 전송한다. 이 글에서는 식당으로 비유하며 클라이언트-서버 구조에서 각각 어떻게 통신을 연결하는지 간단히 정리해보고자 한다. 소켓(socket)이란? 소켓은 통신의 극점이며, 통신을 주고받으려면 반드시 필요한 개체이다(핸드폰으로 자주 비유되곤 한다. 식당 비유에 맞게 비유하자면 한 사람이라고 보면 된다). 각 소켓은 IP 주소 + 포트 번호 조합으로 구별하며, 통신을 통해 컴퓨터가 데이터를 수신하면 해당 포트를 사용하는 프로세스를 찾아 작업을 수행한다. 전화를 걸..

목차Winsock이란Winsock을 이용한 서버 열기클라이언트를 서버에 연결하기깃헙 코드Winsock이란?Winsock은 윈도우 환경에서 통신하기 위해 MS에서 제작한 소켓 라이브러리이다. Winsock을 사용하기 위해 다음과 같은 헤더 및 라이브러리를 추가하면 된다. 다음 목차부터 작성하는 클라이언트, 서버 코드엔 해당 및 라이브러리가 추가된 상태로 작성하였다.// Winsock 통신을 위한 헤더들#include #include #include #pragma comment(lib, "ws2_32.lib") +) 참고로, 여기저기 WSA로 시작하는 함수나 타입들이 잔뜩 나올텐데 WSA는 WinSock API의 약자이다.Winsock을 이용한 서버 열기winsock 초기화Winsock을 사용해 통신하기 위..

개요서버 프로젝트를 하다보면 디버깅 도중 메모리에 데이터가 어떤 패턴으로 저장되어 있는지 확인하고 싶은 경우가 있다. 다양한 방식으로 저장된 데이터를 확인할 수 있지만 디버깅 도중 메모리 창을 띄워서 작업하는 것이 편해 해당 방법에 대해 한 번 정리해보고자 한다. +) 사용한 Visual Studio의 버전은 Visual Studio 2022이다.디버거에서 메모리 창 띄우는 법1. 우선, Visual Studio 상단 탭에서 도구 -> 옵션(또는 디버그-> 옵션)에 들어가 디버깅 -> 일반에 있는 "주소 수준 디버깅" 사용 옵션이 체크되어 있는지 확인한다. 2. 중단점을 대충 찍어놓고(메모리 확인용이기 때문에 설정만 할거면 안찍어도 된다.), F5를 눌러 디버거를 실행시킨다. 3. 디버거가 실행되고 ..

typedef 키워드typedef 키워드는 C언어에서 넘어온 키워드이며, 특정 타입의 별칭을 정의하는 키워드이다. 복잡한 타입을 하나의 이름으로 간결하게 표현하고 싶을 때나 같은 타입이라도 이름을 달리 부여하여 코드의 가독성을 높일 때 사용한다. typedef 키워드의 사용법은 다음과 같다. typedef 선언부// typedef 별칭을_지어줄_타입 별칭_이름// 복잡한 타입: [, , , ...]typedef std::vector> pairlist_t;// 같은 타입, 다른 이름도 가능하다.typedef std::vector numlist_t;typedef std::vector numlist_t2; typedef 사용int main(){ pairlist_t pairlist; // std::vec..