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..
vi CMakeLists.txt ADD_EXECUTABLE( ${실행파일 이름} ${소스 이름 나열} )저장 후 나가기 #cmake CmakeLists.txt 하면 CMakeCache.txtcmake_install.cmakeCMakeFiles(dir)Makefile 들이 생성 된다.이상태에서#make 해주면CMakeLists.txt에 실행파일 이름으로 넣었던 실행파일이 생긴다./${실행파일 이름}실행결과 : Hello World! 위 방법은 간단한 소스의 실행파일 만드는 방법이다.여러 디렉토리에 소스가 나누어져 있는 경우는 나중에 찾기로 하자..
[일반적인 SMTP 통신]1. 3-way handshaking 과정을 거친 후 SMTP 서버는 준비가 되었다는 것을 알리는 코드 220으로 응답한다.2. 클라이언트는 호스트 이름과 HELO 또는 EHLO를 전송한다.HELO : 표준 SMTP 세션 시작EHLO : 메일 서비스 확장을 지원하는 STMP 세션 시작 3. 클라이언트는 MAIL FROM과 함께 form 이메일 주소를 제공한다.4. 이메일 주소를 제공 받은 SMTP서버는 이를 승인 한다. 만약 승인이 되지 않는다면, 이메일 전송은 불가능 하다.5. 클라이언트는 전송될 이메일이 있다는 RCPT TO를 전송한다.6. 클라이언트는 이메일을 전송할 준비가 되었음을 알리는 DATA를 전송한다.7. 서버는 준비가 완료되면, 354 Start Mail Inpu..
우선 구현하기에 앞서 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..