본문 바로가기

C++24

[C++] socket 통신 데이터 송수신 구조체 송수신 송신 struct MyStruct { int a; double b; }; MyStruct c; send(clientSocket, (char*)&c, sizeof(c) , 0); 송신 시 char* 형식으로 변환하여 구조체의 처음주소부터 데이터가 저장된 마지막까지의 메모리를 보내게 된다. 수신 struct MyStruct { int a; double b; }; char recvData[255]; recvSize = recv(hSocket, recvData, sizeof(recvData), 0); if (recvSize == -1) cout 2022. 12. 19.
[C++] TCP socket 통신 구현 소켓 소켓은 컴퓨터가 통신을 하기 위한 도구이다. 컴퓨터 네트워크ㅡ를 경유히 종착점이다. 오늘날 대부분의 통신은 인터넷 프로토콜을 기반으로 하고 있으며 대부분의 네트워크 소켓은 인터넷 소켓이다. 한마디로 대부분이 소켓을 사용한다. 인터넷의 웹이 동작하는 방식도 소켓을 기반으로 동작한다. 서버 - 클라이언트 환경은 아래의 그림의 작업을 통해 진행된다. 소켓 통신 사용 헤더 #include #include // 윈도우에서의 소켓을 사용하기 위해 초기화가 필요하고 // 초기화 함수가 ws2_32.lib의 WSCStartup()를 통해 진행된다. #pragma comment(lib, "ws2_32.lib") WSADATA 구조체 Windows 소켓 초기화 정보를 저장하기 위한 구조체 WSAStartup(소켓버전.. 2022. 12. 19.
[WinAPI] sound PlaySound() 가장 기본적인 sound 함수 #include #pragma comment(lib,"winmm.lib")를 필요로 한다. #include #pragma comment(lib,"winmm.lib") BOOL PlaySound( LPCTSTR pszSound, HMODULE hmod, DWORD fdwSound ); PlaySound(L"filepath.wav", 0, SND_FILENAME | SND_ASYNC); SND_ASYNC 사운드는 비동기적으로 재생되며 PlaySound 는 사운드가 시작된 직후에 반환됩니다. 비동기적으로 재생되는 파형 사운드를 종료하려면 pszSound 를 NULL 로 설정하여 PlaySound 를 호출합니다 . SND_FILENAME pszSound 매개 .. 2022. 12. 17.
[C++] find, find_if 차이점 find와 find_if는 둘 다 헤더에 정의되어 있고 특정값이 있는지 찾아주는 역할을 한다. find는 찾고자하는 값의 타입에 operator ==가 정의되어 있어야 찾을 수 있다. if(a == b)처럼 비교를 통해서 비교해 찾기 때문인 것 같다. 반면에 find_id는 맨 마지막 인자로 조건식을 주면 조건식이 true가 나오는 값을 찾을 수 있다. 특히 vector와 같은 식을 사용할 때 ==가 정의되어 있지 않아 find는 사용할 수 없고 find_if를 사용해 찾아야 한다. vector 2022. 12. 7.
[C++] 멤버함수포인터 소멸자 런타임 에러 1. 클래스의 멤버변수로 멤버함수포인터를 가지고 있었음 2. 멤버함수포인터를 초기화 해라는 경고메시지 떠서 선언 후 바로 초기화를 함 3. 클래스의 소멸자가 호출될 때 런타임 오류가 발생함 4. 멤버함수포인터 초기화 코드를 지우고 실행하니 런타임 오류가 발생하지 않음 null로 초기화 해보고, 사용할 함수의 주소값 넣어서 초기화 해보고 변수 선언 후 바로 초기화도 해봤으나 시작할 때 초기화가 되었다면 여전히 런타임 오류 발생함 결론 : 멤버함수포인터는 선언 후 초기값을 주면 소멸자 호출 시 런타임 오류 호출됨 따라서 런타임 중에 초기화하여 사용해야 한다. 2022. 12. 1.
[C++] 함수포인터, 멤버 함수 포인터 함수포인터 함수도 변수처럼 주소를 포인터 변수에 저장하여 접근이 가능하다. 포인터 변수에 함수의 주소를 저장하여 참조하기 위해 사용한다. int (*varName) (int, int); typedef int (*funcVarName) (int, int); funcVarName a; int - 함수의 리턴타입 (*varName) - 함수의 주소를 저장할 포인터 변수의 이름 / (int* a)에서 a와 같은 역할 (int, int) - 함수의 매개변수 int func(int, int) 형식의 함수의 주소를 저장할 수 있는 varName 포인터변수 생성 typedef로 해당 형식을 미리 지정해 놓고 (int a) 하는 것 처럼 (funcName a)로 바로 접근도 가능하다. int add(int a, int .. 2022. 11. 27.