VisualStudio 98

[C++] Select 모델과 WASEventSelect모델

Select 모델 (동기방식)Select 모델은 여러 소켓에 대한 입출력 이벤트를 감지하고 처리할 수 있도록 도와줍니다.Select 모델은 여러 소켓의 상태를 감지하고, 해당 소켓들 중에서 입력이나 출력 준비가 된 소켓을 선택하여 처리할 수 있도록 해줍니다. 이는 비동기 소켓 프로그래밍의 복잡성을 줄이면서도 다중 클라이언트를 처리하는 데 효과적입니다. select() 함수를 사용하여 소켓의 상태를 검사하고, 필요한 작업을 수행합니다.Select 모델은 단일 스레드에서 여러 소켓을 처리하기 때문에 비교적 간단하게 구현할 수 있으며, 블로킹 소켓을 사용하더라도 다중 클라이언트를 동시에 처리할 수 있습니다. 그러나 매우 많은 수의 소켓을 다루는 경우에는 비효율적일 수 있습니다. 이런 경우에는 다른 모델이나 비..

[C++] setsockopt와 Socket 설정

1. SO_KEEPALIVE (Keep-Alive 설정)bool enable = true;::setsockopt(serverSocket, SOL_SOCKET, SO_KEEPALIVE, (char*)&enable, sizeof(enable));목적: 주기적으로 연결 상태를 확인합니다.설명: TCP 연결이 유효한지 주기적으로 확인합니다. 상대방이 갑작스럽게 연결을 끊어도 TCP 프로토콜을 통해 연결 상태를 확인할 수 있습니다.2. SO_LINGER (지연 닫기 설정)LINGER linger;linger.l_onoff = 1;linger.l_linger = 5;::setsockopt(serverSocket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));목적..

[C++] 블로킹방식 TCP/IP 소스

Client소켓 생성 (Socket Creation)클라이언트 소켓을 생성합니다.  AF_INET은 IPv4, SOCK_STREAM은 TCP를 의미합니다.SOCKET clientSocket = ::socket(AF_INET, SOCK_STREAM, 0);서버에 연결 (Connect)서버의 IP 주소와 포트 번호로 연결 요청을 보냅니다. if (::connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR){}전체 코드#include "pch.h"#include #include "CorePch.h"#include #include #include #pragma comment(lib, "ws2_32.lib")int main..

[C++] 포인터와 참조

포인터포인터는 메모리 주소를 저장하는 변수로 변수의 주소를 갖는 하나의 타입이다. 포인터의 운영체제의 크기에 따라 4바이트 혹은 8바이트로 나뉜다.포인터 기본포인터는 타입 뒤에 *을 붙여 선언하고 &를 사용하여 주소를 추출해 포인터 변수에 담는다.포인터 변수의 원본 값을 변경하기 위해서는 *을 붙여 변수 값을 수정할 수 있다. 이때 *을 포탈이라고 생각하고 주소를 가지고 있는 포인터 변수의 주소를 이용해 원본데이터로 접근하여 데이터를 변경해 준다. int num = 10; // 정수 변수 선언 및 초기화 int *ptr; // 포인터 변수 선언 ptr = # // num 변수의 주소를 포인터에 할당 // 포인터를 통해 num 변수의 값을 출력 std::cout 포인터 함수포인..

VisualStudio/C++ 2024.05.13

[C#] AES128 암호화

AES는 128 비트 블록 크기를 가지며, 128, 192 또는 256 비트의 키를 사용할 수 있습니다. AES는 라운드라는 여러 단계를 거쳐 데이터를 암호화하고 복호화합니다. 각 라운드에서는 다양한 변환 과정을 거쳐 데이터가 혼합되고 변환됩니다.AES의 특징은 다음과 같습니다:안전성: AES는 공격에 강한 구조를 갖고 있습니다. 충분한 키 크기와 충분한 라운드 수를 사용하여 안전한 암호화를 제공합니다.효율성: AES는 효율적인 구현이 가능하며, 속도와 리소스 사용을 최적화하여 빠른 암호화 및 복호화를 제공합니다.대칭 키 알고리즘: AES는 대칭 키 알고리즘입니다. 즉, 암호화 및 복호화에 동일한 키가 사용됩니다.표준화: AES는 미국 국가 표준 기술 연구소(NIST)에 의해 표준으로 채택되었습니다.AE..

VisualStudio/C# 2024.05.07

[프로그래머스/C++] 조건에 맞게 수열 변환하기 2

https://school.programmers.co.kr/learn/courses/30/lessons/181881 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 소스 #include #include using namespace std; int solution(vector arr) { int answer = 0; vector temp; while (true) { temp = arr; for (int i = 0; i = 50 && v % 2 == 0) { arr[i] = v / ..

VisualStudio/C# 2024.03.07

[C++서버] 멀티 스레드 프로그래밍 개념 총 정리

Thread기본 사용 방법C++ 11부터 Thread가 기본 라이브러리로 C++에 생성되었다.사용하기 위해서는 #include 를 명시한다.아래의 코드를 실행하면 오류가 발생한다. 오류가 발생하는 이유는 HelloThread함수가 끝나기 전에 Main thread가 종료되어 발생하는 문제이다. 이를 Join을 통해 해결할 수 있다. <pre id="code_1700614870880" class="cpp" data-ke-la..

[C++] 빌드폴더 위치변경 방법 & pch사용 세팅 방법 & lib 참조 방법

Build생성 파일 위치 변경 1. 적당한 위치에 lib(정적 라이브러리) Build파일을 모아놓을 폴더를 생성한다. 2. 여러 프로젝트의 빌드파일을 모아놓을 Libraries 폴더를 만들었으니 Visualstudio에서 Libraries폴더로 출력폴더를 변경시켜 주기 위해 속성페이지를 들어간다. 속성 페이지는 프로젝트를 우클릭하여 속성을 누르면 된다. 3. 구성을 모든 구성으로 플랫폼 모든 플랫폼으로 변경한다. 변경하면 출력디렉터리등이 변경되는 걸 볼 수 있다. 모든 구성으로 변경하는 이유는 한 번에 Debug, Release에 모두 적용할 수 있기 때문이다. 4. 출력 디렉터리를 클릭 후 만들었던 Libraries폴더이름을 SolutionDir 사이에 넣어준다. 5. 적용 후 완료 클릭 pch사용 세..

[C#] Google Protobuf형식 기반 ProtoBuff-net 사용 방법

Protobuf 참고 사이트 및 공식 https://github.com/protobuf-net/protobuf-net GitHub - protobuf-net/protobuf-net: Protocol Buffers library for idiomatic .NET Protocol Buffers library for idiomatic .NET . Contribute to protobuf-net/protobuf-net development by creating an account on GitHub. github.com https://dotnetcoretutorials.com/protobuf-in-c-net-part-1-getting-started/#google_vignette Protobuf In C# .NET..

VisualStudio/C# 2023.11.02