반응형

2024/11/08 6

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

개요TCP 소켓에서 읽는다는 것은 이 소켓에 연결된 원격 프로그램이 보낸 데이터를 받는다는 의미다.Boost.asio가 제공하는 소켓을 사용해 데이터를 수신하는 가장 간단한 방법은 동기적으로 읽는 것이다.쓰기와 마찬가지로 동기적 방식은 실행 중인 스레드를 멈추게 하고, 데이터를 모두 읽거나 오류가 발생하면 멈춘 스레드를 다시 풀어준다. Boost.asio 라이브러리로 소켓에서 데이터를 읽는 방법 중 가장 기본적인 방법이다.이 메서드는 쓸 수 있는 버퍼를 인자로 받고, 소켓에서 읽은 일부 데이터를 버퍼에 쓴다.이 함수가 성공하면 몇 바이트나 읽었는지를 반환한다.이 메서드가 몇 바이트를 읽을지는 제어할 수 없다.다만 오류가 나지 않는 한 적어도 한 바이트 이상을 읽는다는 것을 보장한다.일반적으로 소켓에서 일..

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

개요TCP 소켓에 쓴다는 것은 이 소켓에 연결된 원격 어플리케이션으로 데이터를 보내는 출력 연산을 한다는 뜻이다.Boost.asio가 제공하는 소켓 연산 중 가장 간단하게 데이터를 보내는 방법은 동기화 쓰기다.동기적으로 소켓에 쓰기 연산을 하는 메서드와 함수는 실행 중인 스레드를 멈추게 하며, 데이터가 소켓에 쓰이거나 오류를 발생하면 멈춘 스레드를 풀어준다. Boost.asio 라이브러리가 제공하는 가장 기본적은 소켓 쓰기 연산 방법은 write_some() 메서드이다.이 메서드는 결합 버퍼를 나타내는 객체를 인자로 받으며, 이름에서 알 수 있듯이 버퍼의 데이터 일부를 소켓에 쓴다.만약, 메서드가 성공하면 몇 바이트나 썼는지를 반환한다.여기서 중요한 점은 이 메서드가 buffers 인자를 통해 받은 데이..

Boost.asio I/O 가변 크기 버퍼, 스트림 버퍼

개요데이터가 새로 추가될 때마다 동적으로 크기가 커지는 버퍼를 확장 가능한 버퍼라고 한다.이러한 버퍼는 소켓에서 데이터를 읽을 때 들어오는 메시지의 크기를 알 수 없을 때 주로 사용한다. 어떤 어플리케이션 계층 프로토콜은 메시지의 크기를 정해놓지 않는다.그 대신 메시지의 경계를 나타내는 일련의 기호 값들을 메시지의 끝에 덧붙이거나 전송 계층의 파일 끝 메시지를 전송하여 메시지를 모두 전송했다는 것을 알린다. Boost.asio 라이브러리에서는 동적으로 확장할 수 있는 버퍼와 이를 받는 함수 모두 제공한다.  asio::streambuf확장 가능한 스트림 기반 버퍼는 Boost.asio에서 asio::streambuf 클래스로 표시된다.streambuf 클래스는 TSL 스트림 클래스가 필요한 상황에서도 사..

Boost.asio I/O 고정 크기 버퍼

개요다른 I/O와 마찬가지로, 네트워크 I/O에서도 메모리 버퍼를 사용한다.메모리 버퍼란, 프로세스의 주소 영역 내에 연속된 메모리 공간으로, 데이터를 저장하는데 사용한다. 어떤 입력 연산을 실행했다면, 프로세스에 도착한 데이터는 주소 공간 어딘가에 저장되어야만 처리할 수 있다. 즉, 버퍼가 있어야 I/O를 처리할 수 있다는 것이다. 입력 연산을 실행하기 전에 버퍼를 할당해둬야 하고 입력 연산 중에 데이터를 저장할 곳으로 이 버퍼를 사용해야 한다. 입력 연산이 끝나면, 버퍼에 입력 데이터가 저장되어 있어 나중에 어플리케이션이 처리할 수 있다. 이와 마찬가지로 출력 연산을 실행하기 전에는 데이터를 준비하여 출력 연산에 쓸 출력 버퍼에 저장해둬야 한다. 그러면 출력 버퍼가 데이터의 소스가 된다. 버퍼는 네트..

Boost.asio I/O 연산

개요네트워크 프로그래밍은 컴퓨터 네트워크를 사이에 두고 프로세스가 서로 통신하는 것을 말한다.통신이란 2개 또는 그 이상의 프로세스가 서로 데이터를 주고받는 것을 말한다.데이터를 주고 받는 것은 I/O 연산을 통해서 이루어진다. I/O 연산은 모든 분산 프로그램의 네트워크 구조에서 빼놓을 수 없는 중요 연산이다.I/O 연산은 데이터 교환과 직접 관련된 기능이며, 데이터를 읽을때는 입력, 보낼때는 출력 연산을 사용한다.  동기 I/O 연산동기 연산을 하면 I/O 연산을 호출한 스레드를 멈추게 하며, 연산이 끝날 때 풀어준다.통신에 시간이 많이 걸리지 않는 데이터를 연산을 한다면 괜찮겠지만, 크기가 큰 데이터나 엄청 잦은 데이터 처리를 요구한다고 하면 연산을 처리하는 동안 해당 스레드를 사용할 수 없다. 하..

[G3] 백준 16637번 괄호 추가하기 C++ 구현, 백트래킹

리뷰 https://www.acmicpc.net/problem/16637주어지는 연산자가 포함된 문자열로 이루어진 수열에서 괄호를 적절히 쳐서 최대값을 만드는 문제처음엔 모든 경우에 대해 괄호를 씌워주었는데, 괄호가 중첩되면 안된다는 조건이 있었다.추가로, 음수 정답이 나오는 예제가 없으니 해당 부분을 놓치기 쉬운 것 같다.  전역 변수n : 입력되는 수열 형태의 문자열의 길이max_lv : 재귀를 멈출 기저조건에 해당하는 레벨ans : 정답을 출력하기 위한 변수, 초기값은 매우 작은 음수값으로 초기화 해준다.s : 수열 형태의 문자열을 입력받을 변수nums : 수열에서 숫자만 따로 저장하기 위한 정수형 벡터ops : 수열에서 연산자만 따로 저장하기 위한 문자형 벡터 함수1. initvoid init()..

728x90
반응형