VisualStudio 91

[C++] && 오른 값 참조(move)와 보편 참조(forward)

1. 오른값 참조 (Rvalue reference)기본적으로 왼값(lvalue)은 메모리에 지속적으로 존재하는 객체를 가리키는 표현식이며, 오른값(rvalue)은 메모리에서 임시로 생성되거나 이동할 수 있는 객체를 가리키는 표현식입니다.오른값 참조는 기존의 왼값 참조와 구분하기 위해 Type&& 형태로 표기됩니다. 객체의 내용을 다른 객체로 이동하여 복사 비용을 최소화하고 성능을 향상시키는 기법입니다. 이를 통해 객체를 복사하는 대신 소유권을 이동시켜 효율적으로 작업할 수 있습니다.  Type&& 형태로 사용되며, Type은 임의의 타입을 나타냅니다. 오른값 참조는 오른값(임시 객체나 이동 가능한 객체)에만 바인딩됩니다.#include #include void process(int&& value) { ..

VisualStudio/C++ 2024.06.04

[VS]Visual Studio LNK1168: 쓰기용으로 열 수 없습니다. 오류

https://learn.microsoft.com/ko-kr/cpp/error-messages/tool-errors/linker-tools-error-lnk1168?view=msvc-170 링커 도구 오류 LNK1168자세한 정보: 링커 도구 오류 LNK1168learn.microsoft.com 링커 도구오류로 파일이 사용 중이고 파일 핸들이 다른 프로세스에 의해 잠겨 있거나 파일 또는 파일이 있는 디렉터리나 네트워크 공유에 대한 쓰기 권한이 없을 때 발생한다. 즉 프로세스가 종료되지 않고 계속 돌아가고 있기 때문에 발생한다.프로세스를 제거해주면 해결된다. 1. cmd창에 tasklist 입력2. cmd 창에 ctrl+f를 하여 찾기를 열어 프로세스 명을 입력하고 찾고자하는 프로세스 PID를 찾는다.3...

VisualStudio 2024.06.04

[C#] is 와 as

C#에서 is와 as 키워드는 타입 검사를 수행하고 타입 변환을 안전하게 처리하는 데 사용됩니다. 이 키워드들은 특히 상속 관계에 있는 객체를 다룰 때 유용합니다.is 키워드is 키워드는 객체가 특정 타입인지 확인할 때 사용됩니다. 객체가 해당 타입이거나 해당 타입에서 파생된 타입이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 또한, C# 7.0부터는 is 키워드를 사용하여 변환된 결과를 새로운 변수에 할당할 수도 있습니다.class Base { }class Derived : Base { }class Program{ static void Main() { Base b = new Derived(); if (b is Derived) { ..

VisualStudio/C# 2024.05.27

[C++서버] IOCP(Completion Port) 모델

Overlapped 콜백기반은 비동기 입출력 함수가 완료가 되면 스레드마다 있는 APC 큐에 일감이 쌓인다.Alertable Wait 상태로 들어가면 APC큐를 전체 비운다. (콜백 함수 호출)APC큐는 쓰레드마다있기 때문에 멀티 스레드 환경에서 적절하게 배분하는데 어려움이 있다.( Alertable Wait 상태로 들어가 APC큐를 비워야 하기 때문이다.)  또 한 Alertable Wait 계속 호출하는 부담이 있다. Overlapped  이벤트 방식으로는 소켓과 이벤트를 1대 1로 대응해야 하고 그리고 감시할 수 있는 수량도 64개 밖에 되지 않기 때문에 많은 수의 이벤트를 관찰하기 어렵다.  이런 문제를 보안하기 위해IOPC(Completion Port) 방식이 나오게 된다. IOPC모델은 Ove..

[C++] Overlapped모델 (비동기 + 논블로킹)

Overlapped 콜백기반은 비동기 입출력 함수가 완료가 되면 스레드마다 있는 APC 큐에 일감이 쌓인다.Alertable Wait 상태로 들어가면 APC큐를 전체 비운다. (콜백 함수 호출)APC큐는 쓰레드마다있기 때문에 멀티 스레드 환경에서 적절하게 배분하는데 어려움이 있다.( Alertable Wait 상태로 들어가 APC큐를 비워야 하기 때문이다.)  또 한 Alertable Wait 계속 호출하는 부담이 있다. Overlapped  이벤트 방식으로는 소켓과 이벤트를 1대 1로 대응해야 하고 그리고 감시할 수 있는 수량도 64개 밖에 되지 않기 때문에 많은 수의 이벤트를 관찰하기 어렵다.  이런 문제를 보안하기 위해 IOPC(Completion Port) 방식이 나오게된다.Overlapped모델..

[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