반응형

2024/11 77

Boost.asio 클라이언트 개요

개요클라이언트는 서버와 통신하는 어플리케이션이며, 서버가 제공하는 서비스를 사용한다.서버가 제공하는 서비스가 필요하다는 점과 그 서비스를 받기 위해 서버와의 통신을 시작하는 것이 특징이다. 클라이언트 어플리케이션은 서버와 통신할 때 사용하는 전송 계층 프로토콜로 나눌 수 있다.UDP 프로토콜을 쓴다면 UDP 클라이언트다.TCP 프로토콜을 쓴다면 TCP 클라이언트다.물론 클라이언트가 쓸 수 있는 전송 계층 프로토콜은 다른 것도 많다.게다가 여러 가지 프로토콜을 사용해 통신할 수 있는 다중 프로토콜 클라이언트도 있다.하지만 일반적으로 소프트웨어에서 가장 널리 쓰이는 프로토콜은 UDP와 TCP이다. 프로그램을 명세에 따라 설계하는 초기 단계에서 통신 시 사용할 전송 계층 프로토콜을 결정해야 한다.TCP와 UD..

Boost.asio I/O 소켓 종료하기와 닫기

개요이전 글에서 다루었던 cancel() 메서드의 경우 연산이 시작되고 난 후 해당 소켓 객체에서 호출되어야만 한다.TCP 프로토콜로 통신하는 어떤 분산 어플리케이션은 메시지의 크기가 고정되어 있지도 않고, 특정 바이트 순열로 메시지의 끝을 나타내는 것도 아닌 경우가 있다.따라서 소켓에서 메시지를 읽어들이는 동안 어디서 메시지가 끝나는지 메시지 자체로는 알 수 없다.헤더 영역과 본문 영역으로 메시지를 구성해 메시지의 끝을 알릴 수도 있다.헤더 부분은 크기가 고정되어 있고 미리 정해진 구조를 따르면서 본문 부분의 크기를 알리는 것이다.그러면 수신하는 측에서 헤더 부분만 먼저 읽어 분석하기만 하면 메시지 본문의 크기를 알 수 있고, 나머지 메시지를 적절하게 읽을 수 있다.이 방법은 매우 간단하며 널리 사용되..

Boost.asio I/O 비동기 연산 취소하기

개요비동기 연산을 시작하도록 한 후에 아직 완료되지 않았지만 종료하고 싶을 수가 있다.더 이상 해당 작업이 필요 없거나, 도중에 다른 방향으로 연산을 하고 싶을 때 등등클라이언트 입장에선 시작은 했지만 아직 끝나지 않은 연산을 종료할 수 있다면 좋은 기능이다.네트워크 통신 연산은 예측하지 못할 정도로 긴 시간이 걸릴 수도 있으므로 취소하는 기능을 제공하는 것은 중요하다.  cancel()일단 코드를 먼저 작성하고 리뷰를 진행한다.#include #include #include using namespace boost;int main(){ std::string raw_ip_address = "127.0.0.1"; unsigned short port_num = 3333; try { ..

Boost.asio I/O TCP 소켓 비동기적 읽기

개요Boost.asio 라이브러리가 제공하는 가장 기본적인 비동기 데이터 읽기 함수는 async_read_some() 메서드다.이전 글들을 참고한다면 알 수 있겠지만 해당 메서드는 여타 some함수와 동일하다. 쓰기와 마찬가지로 버퍼, 콜백 함수 두 가지 인자를 받는다.또한 데이터 읽기 작업 중 예외가 발생할 경우 콜백 함수를 호출한다.만약 데이터를 모두 읽지 못했는데 TCP통신 중 모종의 이유로 중단될 경우 추가적으로 함수를 호출해 주어야 한다.  async_read_some()이 메서드는 소켓의 데이터 중 일부를 읽어 버퍼에 쓰는 연산을 시작한다.해당 비동기 연산이 오류 없이 끝난다면 적어도 한 바이트는 읽는다는 보장이 있다.일반적으로 소켓의 데이터를 모두 읽으려면 이 비동기 메서드를 여러 번 호출해..

Boost.asio I/O TCP 소켓 비동기적 쓰기

개요비동기적 쓰기는 원격 프로그램으로 데이터를 보내는 유연하면서도 효율적인 방법이다.Boost.asio 라이브러리가 제공하는 가장 기본적인 비동기 데이터 쓰기 함수는 async_write_some() 메서드이다.동기적 쓰기에 비해 앞에 async_가 붙은 것을 확인할 수 있다. 동기적 I/O와 유사하게 some()이 붙지 않은 더 편하게 사용할 수 있는 함수가 asio에 있지만, 해당 함수들 모두 결국에는 내부적으로 some()이 붙은 함수를 사용하기에 함수 원형을 먼저 공부하는게 도움이 될 것이다.  async_write_some()Boost.asio 라이브러리가 제공하는 가장 기본적인 비동기 데이터 쓰기 함수이다.이 메서드는 쓰기 연산을 시작한 후 곧바로 반환한다.첫 번째로 소켓에 쓸 데이터를 가진 ..

[P5] 백준 3197번 백조의 호수 C++ 플러드 필, BFS, 유니온 파인드

리뷰 https://www.acmicpc.net/problem/3197드디어 풀었다.. X를 미리 방문처리 안해주다 보니 메모리가 터지고, 미리 방문처리 해주면 LXL 같은 케이스에서 답이 0이 나와서 고심하다가 적절한 해법이 떠올라 적용했더니 바로 AC를 받았다.  전역 변수r, c : 맵의 세로 변의 길이 r, 맵의 가로 변의 길이 cidx : 분리 집합의 인덱스를 지정하기 위한 변수ans : 정답을 저장하고 출력하기 위한 변수dx, dy : 4방향 탐색을 위한 방향 배열lst : 맵 정보를 받기 위한 문자열 배열v : 맵 상의 분리집합을 표시하기 위한 정수형 2차 배열Pos : 시뮬레이션을 할때 좌표 및 그룹 정보를 식별하기 위한 구조체nodes : 그룹의 소속을 관리하기 위한 정수형 벡터ice :..

[G2] 백준 21609번 상어 중학교 C++ 구현, 시뮬레이션, BFS

리뷰https://www.acmicpc.net/problem/21609구현 + 구현 + 구현 + 구현 + BFS + ... + 조건 + 조건 + 조건 + 구현 + 구현 + 구현의 지옥 문제그 많은 변수 중 어느 하나도 잘못된 조건을 가지고 있으면 전혀 다른 답이 출력된다.문제의 조건도 꽤나 많고 까다로워서 실수하기 좋은 문제 예제만으론 엣지케이스를 잡지 못함  전역 변수n : 주어지는 맵의 한 변의 길이m : 맵 상에서 주어지는 일반 블럭의 종류의 개수ans : 정답을 저장하고 출력하기 위한 변수lst : 맵 정보를 입력 받고, 시뮬레이션을 진행하기 위한 2차원 정수 배열v : 매번 오토플레이 시 맵 상에서의 그룹화를 위한 2차원 정수 배열dx, dy : 4방향 탐색을 위한 방향 배열Pos : 각 블럭의..

[G5] 백준 21608번 상어 초등학교 C++ 구현

리뷰 https://www.acmicpc.net/problem/21608빡구현 문제.. 설계를 초반에 잘 하고 넘어가야 코드 수정하는 일이 적어질 것 같다.for문, while문의 지옥을 맛본 문제  전역 변수n : 주어지는 공간의 한 변의 길이lst : 주어지는 2차원 공강을 저장하기 위한 정수형 2차 배열dx, dy : 상하좌우 탐색을 위한 방향 배열friends : 좋아하는 친구 번호를 저장하기 위한 정수형 벡터 배열Pos : 각 학생의 존재 여부와 좌표를 저장하기 위한 구조체poses : 학생 번호를 인덱스로 관리하기 위한 Pos타입 배열Prio : 학생을 배치할 때 우선순위로 사용하기 위한 구조체, 주변 친구의 수 c순으로 내림차순, 주변 빈칸의 수 e순으로 내림차순, 행 번호 x순으로 오름차순..

[G4] 백준 17144번 미세먼지 안녕! C++ 구현, 시뮬레이션

리뷰 https://www.acmicpc.net/problem/17144간만에 풀어보는 100줄 이상 되는 구현 문제  전역 변수r, c, t : 행의 크기 r, 열의 크기 c, 공기 청정기를 작동할 횟수 tlst : 맵의 상태를 저장하기 위한 2차 정수 배열dx, dy : 공기 청정기 및 미세 먼지 확산 시뮬레이션을 위한 방향 배열Air : 공기 청정기의 위치를 표시하기 위한 구조체cleaner : 공기 청정기 위치를 저장하기 위한 Air타입 배열Dust : 맵에 존재하는 미세먼지 정보를 표시하기 위한 구조체 함수1. inputvoid input() 변수 및 맵 정보와 공기 청정기 정보를 입력받고 저장하기 위한 함수r, c, t를 입력 받고 공기 청정기의 인덱스로 사용할 정수형 변수 idx를 0으로 초..

[D4] SWEA [S/W 문제해결 기본] 2일차 - Ladder1 C++ 구현, 시뮬레이션, 브루트포스 알고리즘

리뷰  SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com진짜 맞왜틀을 엄청 외쳤는데 진짜 맞왜틀이였다, SWEA의 기본 문제들 처럼 테스트케이스의 개수가 주어지는 것이 아닌, 테스트 케이스는 10개 고정이고 각 문제의 번호가 맵 입력 전에 주어지는 구조였다.첫 번째 케이스만 맞고 나머지가 오답 처리가 된다면 꼭 Input파일을 다운받아 한번 확인해 보길 바란다.  전역 변수t : 각 문제의 번호를 입력 받을 변수lst : 맵 정보를 입력 받아 저장할 정수형 2차 배열v : 가로 선을 만나 꺾인 경우의 방문 처리를 위한 정수형 3차 배열dy : 좌우로 이동하기 위한 방향 배열 함수1. inputvoid input() ..

728x90
반응형