사실 C라이브러리compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);=> *source를 sourceLen만큼 압축을 해서, *dest 버퍼로 복사합니다.=> *destLen은 dest버퍼의 총 크기이며, sourceLen보다 최소 0.1%는 크게 잡아야하고.=> 압축을 실시해도 크기가 증가되는 경우가 있습니다.(성공했을 때 Z_OK 반환, 메모리 부족 Z_MEM_ERROR 반환, 버퍼의 크기 부족 Z_BUF_ERROR 반환) compress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);=> level을 빼면 compres..
c++에서는 라인을 통째로 읽어오는 라인 입력 함수 getline함수가 있다.getline함수는 2가지가 있다.1. getline함수는 의 cin과 의 ifstream의 멤버 함수2. 에 정의되어있는 getline함수1. getline함수는 의 cin과 의 ifstream의 멤버 함수cin의 getline함수와 ifstream의 getline함수는 Cstring인 char*를 받을 수 있다.ex1) cin.getline(char*, bufferSize) char cstr[512];cin.getline(cstr, 512); 최대 buffersize인 512만큼 cstr에 값을 키보드에서 입력받는다. ex2) ifstream의 객체.getline(char* buffersize) ifstream inf("te..
우선 구현하기에 앞서 SSL 통신에 필요한 certificate를 하나 생성하자openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem 위의 명령어를 입력하면 "mycert.pem" 이라는 Certificate File 이 하나 만들어진다 Client 부분 먼저 코딩을 해 보았다 1.소켓 생성하고 서버에게 연결요청하기socket() 함수를 이용하여 소켓을 생성한다 → sockaddr_in 함수를 이용하여 서버의 IP주소와 PORT를 지정한다 → connect() 함수를 이용하여 서버로 연결을 요청한다. 헤더 #include #include 코드 int connectServer(const char *hostn..
void SSL_load_error_strings(void); void OpenSSL_add_all_algorithms(void); void ERR_load_BIO_strings(void); 이 함수들은 OpenSSL 초기화와 관련된 함수들입니다. OpenSSL은 통신에 관련된 모든 함수들을 포함하고 있기 때문에 비 보안 연결을 위한 통신 역시 연관된 함수들을 사용할 수 있습니다. 연결 관련 함수 비 보안 연결을 위한 함수로는 BIO_new_connect() 함수와 BIO_new_accept() 함수가 있습니다. connect 함수는 연결을 시도하는 함수이고, accept() 함수는 listen을 하는 함수로 보입니다. 두 함수의 원형은 아래와 같습니다. #include BIO *BIO_new_conne..
1. getaddrinfo() 함수 호스트와 서비스명에 해당하는 IP 주소와 포트로 찾아 변환한다.기존 gethostbyname()과 getserverbyname() 함수를 대체하였다. #include #include int getaddrinfo(const char *host, const char *service,const struct addrinfo *hints, struct addrinfo **result);성공하면 '0'을 리턴하고, 에러가 발생하면 '0'이 아닌 값을 리턴 getaddrinfo()함수는 host, service, hist 값을 입력으로 result로부터 정보를 추출하는 구조이다.addrinfo 구조체는 아래와 같다. struct addrinfo{int ai_flags; /* 입력 ..
원래 boost에 있던 라이브러리가 이번에 C++11에서 표준으로 추가되어 매우 기분이 좋습니다.정규식을 사랑하는 한 사람으로서 auto 만큼이나 기쁜 소식이네요. 그래서 간단한 사용법을 정리해 둡니다.flag들까지 하면 기능이 좀 다양한데, 이번에는 회사 저녁먹는 시간이니까... 정규식 검색에 사용되는 객체는 다음과 같습니다. - std::regex - std::smatch - std::ssub_match 그리고 정규식 검색에 사용되는 함수는 - std::regex_match - std::regex_search - std::regex_replace 이렇게 됩니다. 위의 객체와 함수만 있으면 문자열에 정규식을 이용할 수 있습니다. std::regex_match 우선은 std::regex_match를 살펴..
----------------------------------------------------------------------- 윈속의 초기화 윈속의 초기화화 종료 처리 WSAStartup, WSACleanup 윈속의 기능을 이용하기 전에는 반드시 윈속의 초기화를 해야된다. 윈속의 초기화는 WSAStartup()으로 한다. WSAStartup()은 처음에 한번만 호출하면된다. 윈속의 기능을 종료할때는 WSACleanup()으로 한다. WSACleanup은 일반적으로 프로그램의 마지막이나 종료처리에서 실행된다. ====================================================================== #include int main(){ int nRet; // 윈속 초기..
#include class Timer{private: std::chrono::high_resolution_clock::time_point startTime;public: Timer::Timer(): startTime(std::chrono::high_resolution_clock::now()){} ~Timer(){} typedef std::chrono::duration sec; double Timer::getElapsedTime() //지금까지 흐른 시간 리턴 { return std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-startTime).count(); } void Timer::restart() //다시시작 { startTim..