프로그래밍/C++6 C++ 소켓 프로그래밍(Socket Programming) 에코 클라이언트 에코 클라이언트(Echo Client) 만들기C++로 소켓 프로그래밍을 공부할 때 가장 기본이 되는 서버는 클라이언트로부터 문자열을 수신받아서 해당 문자열을 그대로 송신하는 일명 에코서버를 작성해 보는 것이다. 저번 글에서 서버를 만들었다면 이번에는 소켓 클라이언트를 작성해서 소켓 프로그래밍의 기본적인 작동 흐름에 대해서 배워보도록 하자. 전반적인 흐름에 대해서 정리해보자면소켓 생성접속할 IP, PORT를 지정connect()를 통해서 해당 서버에 접속send(), recv() 사용해서 서버와 문자열 주고받기 예제 코드#include #include #include #pragma comment(lib, "ws2_32.lib")int _tmain(int argc, _TCHAR* argv[]){ WSADat.. 2024. 7. 31. C++ 소켓 프로그래밍(Socket Programming) 에코 서버 에코 서버(Echo Server) 만들기C++로 소켓 프로그래밍을 공부할 때 가장 기본이 되는 서버는 클라이언트로부터 문자열을 수신받아서 해당 문자열을 그대로 송신하는 일명 에코서버를 작성해 보는 것이다. 에코 서버를 작성하면서 소켓 프로그래밍의 기본적인 작동 흐름에 대해서 배워보도록 하자. 전반적인 흐름에 대해서 정리해보자면소켓 생성IP, PORT 소켓에 바인딩listen()으로 클라이언트 접속 대기 상태로 전환하기accept()로 클라이언트와 연결하기recv(), send() 사용해서 클라이언트와 문자열 주고받기 예제 코드#include #include #include #pragma comment(lib, "ws2_32.lib")int _tmain(int argc, _TCHAR* argv[]){ WS.. 2024. 7. 31. C++ puts() vs printf() 차이점에 대해서 알아보자 puts()C++에서 문자열을 출력할 때 puts()와 printf()의 차이점을 명확하게 알지 못하고 사용하고 있었다.이번 기회에 둘의 차이점에 대해서 명확하게 알아보고 가자. int _tmain(int argc, _TCHAR* argv[]){ puts("1234"); puts("1234"); puts("1234"); puts("1234"); return 0;} puts()를 사용하면 별도의 개행 입력 없이도 자동으로 개행시켜 준다.printf()이에 반해서 printf()는 자동으로 개행시켜 주지 않는다. int _tmain(int argc, _TCHAR* argv[]){ printf("1234"); printf("1234"); printf("1234"); printf("1234"); return 0.. 2024. 7. 25. 이상하게 반복되는 템플릿 패턴(Curiously Recurring Template Pattern, CRTP) 이상하게 반복되는 템플릿 패턴 CRTP(Curiously Recurring Template Pattern)는 클래스 x가 x 자체를 사용하는 클래스 템플릿 인스턴스화에서 파생되는 C++의 관용어이다. 이를 통해 가상 함수 없이도 동일한 함수를 여러 클래스에서 사용할 수 있는 정적 다형성을 구현할 수 있다. 하지만 이 패턴을 사용하는데는 몇 가지 문제가 있는데 주요 문제 중 하나는 메서드 숨김으로, 파생 클래스가 부모 클래스의 메서드를 실수로 숨실 수 있다는 것이다. (동일한 메서드명으로 선언) 추가로 CRTP 기본 클래스가 템플릿이어야 하므로 복잡성이 증가되고 디버깅하기 어려운 오류가 발생할 수 있다는 것이다. 메서드 숨김 문제를 해결하려면 베이스 클래스에서 메서드를 선언할 때 가상 키워드(virtual.. 2023. 9. 25. htons(), htonl() 함수에 대해서 htons() short 메모리 값을 호스트 바이트 순서에서 네트워크 바이트 순서로 변환한다. 함수 원형 : uint16_t htons(uint16_t hostshort) 파라미터 : uint16_t hostshort short형 호스트 바이트 순서의 데이터 반환 : -1 == 실패, -1 이외의 short 형 네트워크 바이트 순서로 변경된 데이터 htonl() long 메모리 값을 호스트 바이트 순서에서 네트워크 바이트 순서로 변환한다. 함수 원형 : uint32_t htons(uint32_t hostlong) 파라미터 : uint32_t hostlong long형 호스트 바이트 순서의 데이터 반환 : -1 == 실패, -1 이외의 long 형 네트워크 바이트 순서로 변경된 데이터 변수 타입별 함수 구.. 2023. 8. 14. C++ MAKEWORD에 대해서 MAKEWORD란? C++ minwindef.h에 정의되어 있는 매크로 함수이다. 해당 함수를 사용하면 손쉽게 WORD를 만들수 있다. typedef unsigned short WORD; C++에서 WORD란 2바이트 unsigned short로 정의되어 있다. 함수 원형 WORD MAKEWORD (BYTE bLow, BYTE bHigh); bLow에는 하위 8비트에 채월질 데이터를 인자로 전달하고, bHight에는 상위 8에 채워질 데이터를 인자로 전달한다. 간단하게 말하자면 MAKEWORD(x,y)는 ((y) 2023. 8. 14. 이전 1 다음