2024/11 77

Boost.asio 소켓 연결 요청

개요TCP 소켓으로 원격 어플리케이션과 통신을 시작하려면 먼저 논리적 연결을 수립해야 한다.TCP 프로토콜의 연결 수립이란 두 프로그램 사이에서 메시지를 주고 받는것을 의미한다.이것이 성공해야 두 프로그램이 연결된 것으로 간주할 수 있고, 통신을 할 수 있는 준비가 끝난다. 연결 수립 과정을 간단하게 설명하면 다음과 같다.서버 프로그램과 통신하기 원하는 클라이언트 프로그램이 존재클라이언트가 능동 소켓을 생성하고 연 후 connect() 명령을 내림이때 종료점 객체를 통해 원하는 대상 서버프로그램을 명시함네트워크 연결을 통해 연결 수립 요청 메시지를 서버 프로그램으로 전송요청을 받은 서버 프로그램은 자기가 사용할 능동 소켓을 만듦클라이언트와 연결 됐음을 표시하고 이를 클라이언트에 알림(ACK 전달)클라이언..

소켓 통신/Boost 2024.11.07

Boost.asio 소켓 바인딩

개요능동 소켓으로 원격 프로그램과 통신하거나 수동 소켓으로 들어오는 연결 요청을 받으려고 하기 전에, 소켓은 실제 IP 주소와 프로토콜 포트 번호, 즉 종료점에 묶어야 한다.소켓을 특정 종료점과 묶는 과정을 바인딩이라고 한다. 소켓이 종료점에 바인딩 되면, 운영체제가 네트워크에서 호스트의 해당 종료점으로 들어오는 모든 네트워크 패킷을 특정 소켓으로 전달한다.이와 반대로 종료점에 연결된 소켓에서 나가는 모든 데이터는 종료점이 나타내는 IP 주소의 네트워크로 송출된다. 클라이언트 프로그램은 자신의 능동 소켓과 바인딩할 IP 주소 및 프로토콜 포트 번호에 크게 신경쓰지 않지만, 서버 프로그램은 특정 종료점을 명시적으로 자신의 수용자 소켓과 바인딩해야 한다.서버의 종료점은 자신과 통신하기를 원하는 클라이언트가 ..

소켓 통신/Boost 2024.11.07

Boost.asio DNS 이름 해석하기

개요원시 IP 주소는 사람이 기억하기 매우 불편하다. 특히 16진수를 사용하는 IPv6의 경우에는 더욱 그렇다.숫자들과 낱말들이 의미 없이 나열된 문자열을 기억한다는 것은 보통 일이 아니다. 네트워크에 있는 기기에 사람이 기억하기 쉬운 이름을 붙여주기 위해 DNS를 사용한다.www.naver.com이나 www.google.com과 같은 링크는 쉽게 기억할 수 있는 이유이다. DNS는 하나 또는 그 이상의 IP 주소에 대한 별칭이다.DNS가 가리키는 IP 주소가 무엇인지 물어볼 수 있도록 하는 인터페이스를 제공한다.DNS의 이름을 IP 주소로 바꾸는 과정을 DNS 이름 해석이라고 부른다.  DNS 이름 해석기 (resolver)서버 프로그램을 가르키는 DNs 이름과 프로토콜 포트 번호를 얻고 문자열로 표현..

소켓 통신/Boost 2024.11.07

Boost.asio 능동/수동 소켓 만들기

개요TCP/IP 표준에서는 소켓을 언급하지 않는다, API를 어떻게 구현해야 하는지에 대해서도 나와 있지 않다.따라서 TCP 프로토콜 소프트웨어를 개발하는 모든 개발자는 자신만의 프로토콜 구현용 인터페이스를 마음대로 만들 수 있다. (UDP 프로토콜도 동일하다.) 가장 널리 사용되는 TCP/UDP 프로토콜 API는 버클리 소켓이다.버클리 소켓 API는 통신 세션 문맥을 나타내는 소켓을 중심에 둔 디자인이다.어떠한 네트워크 I/O 연산이든, 시작하기 전에 소켓 객체를 할당해야 하고, 그런 다음 소켓과 개별 I/O 연산을 해야한다. Boost.asio는 버클리 소켓 API에서 많은 개념을 빌려왔다.  능동 소켓원격 어플리케이션으로 데이터를 보내고 받거나 연결 수립 과정을 시작하는데 사용하는 소켓 asio::..

소켓 통신/Boost 2024.11.07

Boost.asio 종료점 만들기

개요일반적인 클라이언트 어플리케이션이 서비스를 제공하는 서버 프로그램과 통신하려면, 서버 프로그램이 실행되고 있는 호스트의 IP 주소와 프로토콜 포트 번호를 알아야 한다.IP 주소와 프로토콜 포트 번호라는 한 쌍의 값으로 네트워크상의 특정 호스트에서 실행되고 있는 한 프로그램을 지정할 수 있다.그런 한 쌍의 값을 종료점이라고 부른다. 일반적으로 서버 프로그램의 IP 주소와 포트 번호를 사용자로부터 직접 입력 받거나, 프로그램의 구성 파일에서 알아낸다.IP주소가 IPv4라면, 숫자와 마침표로 이뤄진 문자열로 표시한다.IPv6라면 16진법에 따른 문자열로 표시한다.서버 IP 주소는 DNS를 통해 좀 더 간접적으로 표시하기도 한다. 클라이언트 뿐만 아니라 서버 프로그램 역시 종료점을 다뤄야 한다.서버 프로그램..

소켓 통신/Boost 2024.11.07

[P3] 백준 2820번 자동차 공장 C++ 세그먼트 트리, 오일러 경로 테크닉, 느리게 갱신되는 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/2820오일러 경로 테크닉을 통해 배열을 트리구조로 재정의 하고, 해당 정보를 이용해 세그먼트 트리를 만든다.세그먼트 트리 상에서 LazyPropagation을 통해 업데이트를 진행하고 각 쿼리마다 직원의 월급을 출력하는 문제  전역 변수MAX_N : n이 입력될 수 있는 최대값, 500001로 초기화 한다.n, m : 직원의 개수 n, 쿼리의 개수 mnodes : 각 직원의 초기 월급을 저장할 정수형 배열tree : 세그먼트 트리를 저장할 정수형 배열lazy : 세그먼트 트리의 업데이트 정보를 저장할 정수형 배열it : 오일러 경로 탐색을 통해 직원의 시작 인덱스를 저장하기 위한 정수형 배열sal : 오일러 경로에서 구한 인덱스를 기준으로 ..

임베디드 IoT, 아두이노 ESP32 보드

ESP32wifi + Bluetooth 가 내장된 MCU 보드이다.아두이노를 IDE로 사용가능한 보드로 IoT프로젝트에 매우 많이 사용되는 MCU 보드이다. 능력 대비 가격이 매우 저렴하다는 장점이 있다.  Arduino IDE 설치아두이노는 오픈소스이다.아두이노 공식 홈페이지에 접속해서 IDE를 설치한다https://www.arduino.cc/ Arduino - Home www.arduino.cc SOFTWARE 탭 클릭 후 IDE를 설치하면 된다.설치가 완료 되었다면 파일 -> 기본 설정을 클릭하여 언어를 한국어로 변경할 수 있다. 이후 ESP32 보드를 추가해야 사용할 수 있다.추가 보드 관리자에 URL을 추가해 준다. https://dl.espressif.com/dl/package_esp32_in..

임베디드/IoT 2024.11.07

임베디드 IoT

개요IoT(Internet of Things)는 사물 인터넷으로 사물들이 서로 연결 되어 있다는 것을 의미한다.각종 사물에 센서와 유/무선 통신 기능을 내장하여 인터넷에 연결하는 기술을 말한다.이름에서도 알 수 있듯 IoT는 유무선 상관없이 인터넷에 연결되어야 한다.  활용 사례IoT는 초기 대기업이나 전문 분야에 주로 사용되었다.요즘은 임베디드 시스템의 소형화, 고성능화로 인해 일반인도 손쉽게 구현이 가능해 졌다.스마트팜스마트 팩토리홈오토메이션헬스케어실버산업운송인공지능무인공장자율주행웨어러블위 분야 외에도 굉장히 많은 분야에 활용이 가능하다.홈 IoT를 통해 내가 원하는 기능을 커스텀하여 내 집에 적용할 수도 있다.실제로 삼성과 LG에선 관련 API를 제공하고 있다.https://developer.sma..

임베디드/IoT 2024.11.07

[P5] 백준 1989번 부분배열 고르기 2 C++ 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/1989 [P5] 백준 2104번 부분배열 고르기 C++ 세그먼트 트리리뷰 https://www.acmicpc.net/problem/2104구간의 누적합과 최소값의 인덱스를 저장한 세그먼트 트리를 구현하고 구간의 누적합 * 구간의 최소값이 가장 큰 케이스를 찾아 출력하는 문제  전역 변수n :zzzz955.tistory.com위 문제와 동일하나 구간의 범위까지 출력해 주어야 하는 문제  전역 변수MAX_N : n값의 최대값을 저장할 정수형 상수 변수n : 배열의 길이를 저장할 변수nodes : 배열의 정보를 저장할 정수형 배열, 크기는 MAX_NminTree : 최소값의 인덱스를 저장할 세그먼트 트리, 크기는 MAX_N * 4Res : 구간의..

[P5] 백준 2104번 부분배열 고르기 C++ 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/2104구간의 누적합과 최소값의 인덱스를 저장한 세그먼트 트리를 구현하고 구간의 누적합 * 구간의 최소값이 가장 큰 케이스를 찾아 출력하는 문제  전역 변수n :주어지는 배열의 길이MAX_N : n의 최대값nodes : 배열 정보를 저장할 정수형 배열, 크기는 MAX_N으로 세팅한다.minTree : 최소값의 인덱스를 저장할 세그먼트 트리 크기는 MAX_N * 4sumTree : 구간의 합을 저장할 세그먼트 트리 크기는 MAX_N * 4 함수1. minBuildvoid minBuild(ll node, ll s, ll e) minTree를 초기화 하기 위한 함수리프 노드에 s혹은 e로 각 배열의 인덱스를 저장해 준다.리프 노드가 아닐 경우 s ..

728x90