전체 글 120

[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..

[C/C++] ASCII 코드값을 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환하기

[C/C++] ASCII 값을 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환하기 안녕하세요 JollyTree입니다 (•̀ᴗ•́)و C/C++에서 char 자료형의 문자 변수는 0에서 127 사이의 정수 값을 저장할 수 있습니다. 이는 미국 ANSI(American Standard Code for Information Interchange)에서 표준화한 정보교환용 7비트 부호체계인 ASCII 코드에 해당되며 영문 키보드로 입력할 수있는 모든 기호들이 할당되어 있어 있습니다. ※ ASCII 코드에 대한 자세한 설명은 위키백과를 참고해 주세요. 아래 표와 같이 ASCII 코드값에는 십진수(Dec.)기준으로 숫자(0~9)가 48번에서 57번에 할당되어 있고, 알파벳 대문자..

[여행] 세종 호수공원 자전거 타는 개구리와 봄꽃들

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 황사가 지난간 후 화창한 봄날이 계속 되고 있어서 정말 기분이 업 되었답니다. 여기 저기 피어 있는 꽃들도 코로나로 지친 마음을 달래주기도 하구요. 오며 가며 찍어 놓은 봄꽃들이 저만보기 아깝기도 해서 올립니다. 참! 글쓰는 중에 생각났는데 꽃이 아닌 것도 있어요. 일명 폭탄머리 머리 개구리, 아프로(Afro) 머리라고 하는데 글쎄 세종에 폭탄머리 개구리 조형물이 있더라구요 ㅎ 그것도 자전거를 타고 있는 개구리요 ㅎㅎ 짜잔~~ 위 사진은 가까운 거리에서 찍은 것인데 처음 약 60~70m 거리 멀리서 봤을 때는 특별한 헤어스타일을 한 것처럼 보였답니다. 멀리서 보고 저게 모야 ?하고 크게 웃었어요. 정말 참신하다고 생각했지 모예요. 대한민국의 행정 특별자치..

Daily Life 2021.04.11

[C/C++] C언어 수학 함수(round, ceil, floor) 직접 구현 하기(예제포함)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 지난번에는 abs(), fabs(), sqrt(), pow() 수학 함수를 직접 구현하여 C/C++ 라이브러리 함수와 비교하는 자료를 포스팅하였습니다. 이번에는 추가적으로 다음 3개 수학 함수들을 직접 구현하여 컴파일러가 제공하는 라이브러리 함수와 비교하고자 합니다. o 반올림 값을 구하는 round() 함수 o 소수점 올림 값을 구하는 ceil() 함수 o 소수점 내림 값을 리턴하는 floor() 함수 구현한 사용자 함수가 올바른 결과 값이 구해지는지의 검증은 지난 번과 마찬가지로 동일한 실험 데이터를 가지고 C/C++ 라이브러리 함수와 비교하였습니다. double r[] = { 3.2, 3.7, -3.2, -3.7, 5.1, -6.6 }; double..

[C/C++] C언어 수학 함수(pow, sqrt, abs, fabs) 직접 구현 하기(예제포함)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و C/C++ 언어는 기본적으로 많은 수학 관련 함수를 지원합니다. 수학 과련 함수들을 사용하기 위해서는 #include 를 소스코드에 추가하여 사용합니다. 이미 준비된 라이브러리 함수를 사용하면 아주 편리하지만 이런 라이브러리 함수들이 내부적으로 어떻게 구현되어 있을까?라는 호기심이 생깁니다. 그래서 C/C++ 언어가 제공하는 수학 함수 중에 비교적 많이 사용되는 함수를 컴파일러가 제공해 주는 라이브러리를 사용하지 않고 스터디 차원에서 직접 구현해 보았습니다. o 정수의 절대값을 계산하는 abs() 함수 o 실수의 절대값을 계산하는 fabs() 함수 o 제곱근을 계산하는 sqrt() 함수 o 거듭 제곱을 계산하는 pow() 함수 직접 구현한 사용자 정의 함..

[C/C++] 정수(int)와 문자열(string) 상호 변환하기(itoa, atoi, sprintf, snprintf function examples)

안녕하세요 JollyTree(•̀ᴗ•́)و입니다. 정수와 문자열을 서로 변경하는 방법에 대해 정리하려고 합니다. 자료형 간의 변환은 코딩시 많이 사용되는 경우로 이번 자료에서는 itoa, atoi, sprintf 함수 사용 예제 위주로 설명하고 snprintf()를 사용한 응용 예제를 공유합니다. 인터넷에 함수 원형(Prototype)을 설명한 자료들은 많기에 예제위주로 설명을 하려합니다. 예제를 보고 편리한 방법을 사용하면 되겠습니다. 정수(int)와 문자열(string) 상호 변환 예제(Example) - itoa, atoi, sprintf, snprintf 함수 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 26 27 28 29..

[IT, 컴퓨터] AVAST 백신 티스토리 블로그 URL:Blacklist 감염 알림 끄기(예외 추가)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 체코의 Avast Software에서 개발한 무료 컴퓨터 백신 중 하나인 어베스트 백신(AVAST Antivirus)은 티스토리에 있는 글들을 보고 있으면 아래와 같이 URL:Blacklist에 감염됐다고 합니다. 블로그에 있는 그림도 제대로 출력되지 않고 말이죠. 읽고 있는 블로그에 그림이 많으면 경고창이 계속 여러 번 뜨게 됩니다. 화면을 가려서 제대로 글도 읽기가 어려워요. 그런대로 귀찮음에 실시간 탐지에서 "웹 감시"를 다음 시작 시까지 오프(Off) 시켜놓고 인터넷을 사용했는데, 컴퓨터를 켜서 사용할 때마다 여간 신경 쓰이는 게 아니더라고요. 사실 예외 옵션을 찾으려는데 어디 있는지 못 찾아서 "웹 감시"를 일시적으로 꺼 넣고 단순하게 사용했습니..

OS & Software 2021.04.07

[C/C++, SFML] 사이먼 게임(Simon Game) 만들기(Build a Simon Game)

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 오늘 주제는 그동안 SFML 관련 자료를 포스팅한 기본윈도우 출력, 타이머 구현, 캐릭터 및 배경 이미지, 폰트 출력 등의 내용들을 일부 종합 정리하고 처음 연재 시작할 때 계획했던 사이먼 게임의 개발 과정을 소개하려고 합니다. 게임이라고 할 정도로 거창하진 않고요. 3월 24일날 처음 SFML에 대한 연재를 시작하면서 사이먼 게임을 말씀드린 내용이 있어 정리하고자 합니다. 사이먼 게임은 1978년 처음 세계에 알려진 이래 지금까지 판매되고 있는 정말 오랜된 게임으로 초창기 버전은 전자기기 형태로 출시되었다고 합니다. 70년대와 80년대는 대중 문화의 상징일 정도였다고 하니 정말 대단했던것 같습니다. 알고리즘 구현에 사용된 언어는 어셈블리어였으며 코드 대..

[C/C++, SFML] 11. 개체(Shape, Sprite) 충돌(Collision) 감지하기

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و SFML의 sf:Rect 클래스 내 intersects() 메소드는 사각형 영역에 대한 충돌(Collision) 감지를 지원합니다. 2개의 Sprite나 Shape가 존재하면서 서로 영역이 겹친다면 이를 충돌로 인식할 수 있습니다.이번 포스팅은 1:n의 RectangleShape 개체를 화면에 출력하고 1을 플레이어로 가정하여 n개의 개체들과 충돌하는 것을 공유하려고 합니다. 기본 컨셉은 먼저 MAX_ENEMY_COUNT 20개 만큼 enemies 에 저장합니다. 20개의 적들은 1~25 x 1~25의 랜덤한 크기로 1~500의 랜덤한 위치에서 등장합니다. 사용자는 상/하/좌/우 방향키로 플레이어(rect_player)를 조정하여 위에서 아래로 박스들과의..

[C/C++, SFML] 10. 키보드 이벤트(Event) 및 상태(State) 처리하기

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و sf::Keyboard 클래스는 눌린 키, 키눌림, 키 떼임 등의 키보드 상태에 대한 인터페이스를 제공합니다. Event::KeyPressed, Event::KeyReleased 이벤트를 이용하여 키의 눌림과 떼임 상태를 알 수 있으며 어떤 키가 눌렸는지 event.key.code의 값을 통해 눌린 키의 값을 확인할 수 있습니다. 예제는 상, 하, 좌, 우 방향키가 입력되면 이벤트를 입력받아 화면의 빨간색 사각형을 입력된 키 방향에 맞춰 -10, +10 만큼씩 움직입니다. 스페이스(Space) 키를 누를 경우 파란색 테두리의 작은 사각형에 move() 메소드를 이용하여 소소한 애니메이션 효과를 주고 애니메이션 효과가 끝나면 빨간색 사각형의 중앙으로 작은 ..

[일상] 아이스크림 케잌은 이제 그만(?)!!

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و 가족들이 아이스크림을 좋아해서 생일 때 아이스크림 케잌을 몇 번 샀드랬어요. 지인분들이 모바일 기프트 카드로 보내주시기도 해서 아이스크림 케잌을 먹게 되었지요. 근데, 매번 제대로 먹지도 못하고 불상사가 생겼지 모예요. 우리는 아이스크림 케잌과는 인연이 아닌가 보다 우리랑 안 맞나 보다 생각하고 한동안 아이스크림 케잌을 안 사먹었어요. 물건을 잘 떨어뜨리는 스타일이기도 하고요...ㅎㅎ 첫번째 불상사!예요. 철퍼덕! 하는 순간 아...하고 뇌정지가 몇초간 오더라구요. 그래도 이건 양호해요 케잌이 완전이 이탈 하지 않았으니까요. .... 그리고 얼마 뒤 생일이 있어서 다시 아이스크림 케잌으로 추카 파뤼!를 하기로 했어요. 더 높은 위치에서 철퍼덕!! 또 다시..

Daily Life 2021.04.03

[C/C++, SFML] 9. 엔티티(Sprite, Text, Share 등) 위치, 로테이션, 스케일 등 모양 바꾸기

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و Sprite, Text, Shape의 클래스들은 동일한 sf::Transformable 인터페이스를 통해 Sprite, Text, Shape들의 크기 변경, 회전, 이동 등을 지원합니다. 동일한 유형의 간단한 API를 통해 move, rotate, scale 변경이 가능한데 예를 들어 Text의 위치를 변경한다고 하면 아래와 같이 setPosition()를 통해 절대 위치를 정하고 move()를 통해 상대 위치로 엔티티를 이동 시킬 수 있습니다. 이 같은 절차는 Sprite, Shape들도 동일하게 적용됩니다. 아래 예에서 text.getPosition()의 결과는 setPosition(), move()에서 설정한 위치가 누적 반영되어 x는 110, y는..