전체 글 116

[C언어/C++] Winsock 멀티스레드 1:N 대용량 파일 전송(송수신) 서버/클라이언트 구현하기(TCP/IP Windows socket) #2/3

[C언어/C++] Winsock 멀티스레드 1:N 대용량 파일 전송(송/수신) 서버/클라이언트 구현하기(TCP/IP Windows socket) #2/3 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 지난번에는 서버, 클라이언트에 대해 구상한 프로그램 개념도, 통신 규약, 서버/클라이언트 통신 절차에 대해 포스팅하였습니다. 이번에는 구상한 내용을 토대로 구현한 클라이언트 프로그램에 대한 설명과 소스코드를 포스팅합니다. 클라이언트는 전송하고자 하는 파일의 파일 크기와 데이터를 읽은 뒤 "파일명&파일 데이터" 형태로 패킷 데이터를 우선 구성합니다. 그런 다음 소켓을 초기하고 서버에 연결한 후 패킷 헤더(PACKET_HEADER)를 구성하여 서버에 패킷 헤더 5바이트를 먼저 전송합니다. typedef st..

[C언어/C++] Winsock 멀티스레드 1:N 대용량 파일 전송(송수신) 서버/클라이언트 구현하기(TCP/IP Windows socket) #1/3

[C언어/C++] Winsock 멀티스레드 1:N 대용량 파일 전송(송/수신) 서버/클라이언트 구현하기(TCP/IP Windows socket) #1/3 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 이번 포스팅은 윈속(Winsock)을 이용한 파일 전송에 대한 내용입니다. 파일 전송 기능은 모바일, 데스크톱 환경에서의 카카오톡, 텔레그램 등 각종 메신저 프로그램에서는 이제 필수가 된 기능으로 네트워크 프로그래밍을 스터디하기에는 좋은 주제라고 생각합니다. 그리고 이번 자료는 지난번 1:N 채팅 프로그램을 스터디한 후 네트워크 프로그래밍에 더 익숙해지기 위한 내용이라 할 수 있습니다. 본론으로 들어가서, 프로그램의 기본적인 개념은 다음 그림과 같이 클라이언트는 파일을 전송하고 서버는 N개의 클라이언트들..

[C언어/C++] scanf 정수 3개(N개) 입력 받기 + 총합, 평균, 작은수, 큰수 구하기(scanf reading N numbers, Calculate the sum and average of N numbers)

[C언어/C++] scanf 정수 3개(N개) 입력 받기 + 총합, 평균, 작은수, 큰수 구하기(scanf reading N numbers, Calculate the sum and average of N numbers) 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 간단한 문법이지만 간혹 찾아보게 되는 부분이라 정리합니다. ■ scanf 정수 3개 입력 받고 총합, 평균, 작은수, 큰수 구하기 정수 입력시 순차적으로 줄바꿈없이 입력하도록 되어 있습니다. 입력 예) 정수 3개를 입력하세요:(예: 100 200 300) 1234 4567 4321 scanf 예제(Example Code): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25..

[C언어/C++] memcmp() 함수 - 문자열/메모리 데이터 비교 하기 예제 + strcmp(), strncmp() 함수와의 차이점

[C언어/C++] memcmp() 함수 - 문자열/메모리 데이터 비교 하기 예제 + strcmp(), strncmp() 함수와의 차이점 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و memcmp() 함수는 strncmp() 함수와 사용방법이 비슷합니다. 차이점이 있다면 strncmp() 함수는 NULL 문자('\0')가 문자열 내에 존재하면 NULL 문자 전까지의 문자열을 비교하지만 memcmp() 함수는 NULL 문자뿐만 아니라 바이너리 문자들을 포함하여 메모리에 있는 데이터를 비교할 수 있습니다. 따라서 바이너리 문자가 포함된 데이터를 비교하기 위해서는 memcmp() 함수를 이용하는 것이 좋습니다. int memcmp( const void *buffer1, const void *buffer2, ..

[C언어/C++] strcmp(), strncmp() 함수 - ID/Password 문자열 비교 하기 예제

[C언어/C++] strcmp(), strncmp() 함수 예제 - ID/Password 문자열 비교 하기 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و C언어에서 문자열은 일반적인 비교 연산자(==)로는 비교할 수 없으며 strcmp, strncmp와 같은 함수를 이용하여 문자열 이 같은지 비교를 해야 합니다. strcmp 함수는 매개변수 2개에 저장되어 있는 모든 문자열을 비교하고 strncmp 함수는 세 번째 매개변수 size_t count에 지정된 크기만큼 문자열을 비교합니다. int strcmp( const char *string1, const char *string2 ); int strncmp( const char *string1, const char *string2, size_t coun..

[C언어/C++] 문자열 길이 구하기 : strlen() 함수 ID/Password 길이 체크 예제

[C언어/C++] 문자열 길이 구하기 : strlen() 함수 ID/Password 길이 체크 예제 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و strlen() 함수는 문자열의 길이를 구하는 함수입니다. NULL('\0')이포함된 문자열에서 NULL 문자를 제외한 문자열의 길이를 반환합니다. 예제는 입력한 문자열의 길이를 구하는 코드와 입력한 ID/Password가 하드 코딩된 ID/Password의 길이와 문자열이 동일한지를 비교 검사하는 코드로 구성되어 있습니다. strlen() 함수의 자세한 설명은 예제를 참고하세요. ▣ strlen() 함수 예제(Example Code): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2..

[C언어/C++] printf, scanf 함수 변수 입출력 예제(정수, 실수, 줄바꿈 등 포맷 지정자:format specifiers)

[C언어/C++] printf, scanf 함수 변수 입출력 예제(정수, 실수, 줄바꿈 등 포맷 지정자:format specifiers) 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و printf, scanf 함수는 C/C++ 언어에서 표준 입력과 출력을 지원하는 함수로 콘솔 형태의 프로그램에서 가장 많이 사용되는 함수입니다. 표준 입출력 헤더인 stdio.h에 정의된 가장 기본적인 함수이며 자료형에 따라 %d, %f, %u 등 포맷 지정자(format specifier)를 사용해 주어야 합니다. 포맷 지정자는 종류가 많아 자주 사용하는 지정자는 익숙하지만 그렇지 않은 것은 매번 자료를 찾아봐야 하는 번거로움이 있습니다. 알아두면 편리한 포맷 지정자를 예제와 함께 핵심 내용 위주로 정리하였습니다. ■..

[컴퓨터] 비대면 시대 저렴한 중저가 노트북 "태클라스트" 구매 후기(Teclast F7 Plus : 8GB RAM 256GB SSD)

비대면 시대 저렴한 중저가 노트북 태클라스트 구매 후기(Teclast F7 Plus : 8GB RAM 256GB SSD) 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 코로나로 인해 초증고 각급 학교에서 비대면 오프라인 수업이 지속되고 있는데요. 노트북, 테블릿, 패드 등과 같은 디바이스가 필요한 시기인것 같습니다. 낡은 노트북을 업그레이드를 할까 아니면 교체를 할까 고민을 하다가 부품간에 호환성도 생각해야 하고 복잡해서 교체쪽으로 마음을 굳혔어요. 개인적으로 보통 CPU, RAM, SSD/HDD, 해상도 정도 스펙을 보는 편인데요. 쓸만하다 싶으면 브랜드 노트북은 100만원 이상 훌쩍 넘어 갑니다. 제 경우 컴파일러, 문서 작업 용도로 노트북을 사용할 것이기 때문에 고가의 노트북은 필요가 없었구요...

Daily Life 2021.04.20

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기 #4:: TCP 클라이언트 구현(소스코드)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 먼저 클라이언트 기능을 구현해 보았습니다. 클라이언트는 기본적으로 서버에 접속하여 채팅 메시지를 송·수신하는 기능을 포함하며 서버와 같이 여러 클라이언트들의 소켓을 관리할 필요가 없어 서버에 비해 비교적 소스코드가 간단합니다. ■ 클라이언트 주요 기능 - 소켓 초기화 및 서버 접속 - 소켓으로 부터 채팅 메시지와 서비스 종료 메시지를 수신하기 위한 FD_READ, FD_CLOSE 이벤트 등록 - 소켓을 이용한 채팅 메시지 송신 및 수신 FD_READ, FD_CLOSE 등의 네트워크 이벤트가 궁금하시면 WSAEventSelect functions(winsock2.h) MS 자료를 참고하세요. main() 함수 내 코드를 위주로 설명을 하면, 먼저 프로그램의..

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기 #3:: TCP 서버 구현하기(소스코드)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 이번에는 채팅 서버 기능을 구현해 보았습니다. 1:N 서버는 기본적으로 N개의 클라이언트(사용자)의 접속이 필요하므로 N개의 소켓을 관리하고 각 클라이언트들로부터 보내진 메시지를 다수의 클라이언트로 재전송하는 기능을 포함합니다. ■ 서버 주요 기능 - 소켓 초기화 및 클라이언트 접속 대기 - 소켓으로부터 클라이언트 접속, 채팅 메시지와 서비스 종료 메시지를 수신하기 위한 FD_ACCEPT, FD_READ, FD_CLOSE 이벤트를 등록 - 소켓을 이용한 채팅 메시지 수신과 전달 - 클라이언트 연결/접속 종료 상태와 공지사항 전달 다수의 클라이언트들은 소켓, 이벤트, 별명, IP주소 정보가 포함된 SOCK_INFO 구조체를 통해 관리되며 SOCK_INFO ..

구글 애드센스 2차 시도에 승인 !!

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 두 번째 신청해서 오늘 애드센스 광고를 게재할 수 있다는 결과를 받았어요. 1차 낙방 때 재 도전해보고 결과 공유한다고 했었는데요. 간단히 제 경험을 타임라인으로 공유할게요. ▶ 3월 15일 첫 애드센스 신청! 글자수를 염두하지 않고 그날 계획했던 대로 포스팅한 글이 약 20여개 정도였어요. ▶ 3월 31일 1차 낙방(보완 후 재신청) 통보! ^^ 저도 몇몇 분들처럼 1차 낙방 때 "제작 중인 사이트 또는 앱에 대한 자리표시자 콘텐츠를 포함하는 콘텐츠가 없습니다"("No Content includes placeholder content for sites or apps under construction.")라는 안내를 받았어요. 개인적인 생각으로 1차 신청..

Daily Life 2021.04.17

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기 #2:: 프로그램 구조 및 Winsock 라이브러리 설정

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 1:N 채팅 프로그램은 기본적으로 TCP 프로토콜을 기반으로 1개의 서버가 N개의 클라이언트(사용자)를 지원합니다. 아래 개념도에서와 같이 각 클라이언트는 서버를 통해 서로 채팅 메시지를 주고받을 수 있어요. ■ 채팅 프로그램 기능 다음은 채팅 프로그램의 기본 기능입니다. - 클라이언트 접속/종료 알림 기능 : 새로운 클라이언트가 접속하거나 접속을 종료하면 모든 클라이언트에게 알림 - 1:N 채팅 지원 기능 : 서버가 채팅 메시지를 모든 클라이언트에게 전달하여 1:N 채팅을 지원 - 서버 공지 기능 : 서버가 공지 메시지를 모든 클라이언트에게 전달 - 서버 종료 알림 기능 : 서버가 종료되면 모든 클라이언트에게 종료 메시지를 전달 Visual Studio..

[C/C++] 윈도우 소켓(Winsock) 1:N 채팅/통신 프로그램 구현하기#1:: 소개

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 인터넷이 일반화되어 있는 요즘은 카카오톡, 웹브라우저 등 대부분의 프로그램들이 네트워크 통신 기능을 기본적으로 제공하고 있습니다. 그래서 이번에는 윈속(Winsock)을 이용한 네트워크 통신 프로그램 구현 방법에 대해 스터디한 글을 짧은 연재로 기록합니다. 윈도우, 리눅스 등의 운영체제에서 네트워크 통신 프로그램 개발할 수 있는데요. 기본적으로 소켓(socket) 라이브러리를 통해 프로그램을 개발할 수 있습니다. sqrt(), pow(), abs(), fabs() 등과 같은 수학 관련 라이브러리를 사용하듯이 네트워크 프로그래밍을 하려면 socket(), bind(), accept(), send(), recv() 등과 같은 소켓 관련 함수를 사용합니다. 윈..

[일상] 다이소 FM/AM 겸용 라디오 & KBS 수신안내 지도

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 손전등이 필요한 터라 잠시 다이소에 들렀습니다. 근데 손전등은 못 사고 라디오를 사 왔어요. 취~~익 라디오 갬성 때문에 즉흥적으로 산 5,000원짜리 라디오고요. 5,000원이면 아마 다이소에서 비싼 측에 들지 않나 싶어요. ㅎㅎ 블로그 주제로 올리기에는 개인적으로 부족한 생각이 들지만 다이소에서 라이오를 살 수 있을지 몰랐거든요. 혹시 필요하신분 가실 때 한번 찾아보세요. 진정 기본에 충실한 라디오랍니다. 취~~익 ^^ FM만 수신되는 라디오, FM/AM 모두 수신되는 라이오로 두 종류가 있더라고요. 저는 AAA 건전지 2개가 들어가는 조금 작은 FM/AM 겸용 라디오를 샀습니다. 설명을 하는 것보다 설명서 사진을 올리는 것이 더 좋을 듯합니다. 크기..

Daily Life 2021.04.14

[C/C++] 라이브러리 함수(isalnum, isalpha, isupper, islower, isdigit, isspace)를 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환(toupper, tolower)하기

[C/C++] 라이브러리 함수(isalnum, isalpha, isupper, islower, isdigit, isspace)를 이용하여 문자열 내 알파벳, 숫자, 영어 대소문자, 공백 식별하기 + 대소문자 변환(toupper, tolower)하기 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 지난 번에는 별도의 C/C++ 라이브러리를 사용하지 않고 ASCII 코드 테이블만을 이용하여 사용자가 입력한 문자열 내에서 알파벳 대소문자, 공백, 숫자 등을 식별하여 분류하였습니다. ※ 참고: [C/C++] ASCII 값을 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환하기 지난 번 자료에서 조금 더 고민해 보면 m_isdigit(), m_isalpha(), m_isaln..