C언어 다중 채팅 제작
·
C/Project
🌟 전체 구조 개요더보기시스템 아키텍쳐클라이언트 (cl.c) ←→ 소켓 통신 ←→ 서버 (serv.c) ←→ MySQL DB클라이언트: 사용자 인터페이스 및 서버의 통신 담당서버: 다중 클라이언트 관리, 채팅 중계, 데이터베이스 연동데이터베이스: 사용자 정보, 채팅 로그 저장 클라이언트 아키텍쳐 개요사용자 입력 → 송신 스레드 → 소켓 → 서버 ↑ ↓ 메인 스레드 수신 스레드 → 화면 출력 클라이언트 상태 머신초기상태 → 로그인/회원가입 → 메인메뉴 → 개인정보변경 or 채팅 ↑ ↑ ↓ └── 종료 ←── 로그아웃 ←───┘ /exit 🌟 서버 코드 분석..
C언어 Newwork Study 5
·
C/Study
🌟 다중 접속 로그인 구현더보기//client #include #include #include #include #include #include #define BUF_SIZE 1024char global_pw[50] = "passw123";char global_id[50] = "user1";pthread_mutex_t input_mutex = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_t output_mutex = PTHREAD_MUTEX_INITIALIZER;// 상태 관리용 enumtypedef enum { STATE_WAIT_LOGIN, STATE_LOGGED_IN} ClientState;ClientState client_state = STATE_WAIT_LO..
C언어 Newwork Study 4
·
C/Study
🌟 로그인 구현 >> 로그인 후 >> ID 변경, PW 변경 구현더보기+ ID, PW 정보는 member 같은 구조체 자료형으로 구현 클라이언트에서 입력받은 ID, PW 를 서버로 전송서버에서 전달받은 ID, PW 체크 후 결과 클라이언트로 전송클라이언트에서 전달받은 결과에 따라 처리하는 로직 구현 // client#include // 표준 입출력 함수 (printf, scanf 등)#include // 일반 유틸리티 함수 (exit, atoi 등)#include // 문자열 처리 함수 (strcpy, strcmp, memset 등)#include // 유닉스 시스템 함수 (read, write, close 등)#include // 인터넷 주소 관련 함수 및..
C언어 Newwork Study 3
·
C/Study
🌟 4-3 에코 클라이언트의 문제점더보기// echo_server.cwhile((str_len = read(clnt_sock, message, BUF_SIZE)) != 0) write(clnt_sock, message, str_len);// 서버는 클라이언트로부터 데이터를 여러 번에 걸쳐 수신할 수 있다고 생각하고 read()를 반복 호출함.// 수신한 만큼만 write()로 다시 전송함.// ehco_clientwrite(sock, message, strlen(message));str_len = read(sock, message, BUF_SIZE-1);// 클라이언트는 문자열을 한 번에 전송함// read()도 한 번만 호출해서 모든 데이터가 한 번에 수신되기를 기대함 해결책 1: read()..
C언어 Newwork Study 2
·
C/Study
🌟 TCP/IP 소켓 프로그래밍 예제 분석_p21. hello_serve r.c 더보기#include // 표준 입출력 함수 사용 (예: printf, fputs)#include // 표준 라이브러리 함수 (예: atoi, exit 등 사용)#include // 문자열 처리 함수들 (예: memset 사용)#include // 유닉스 계열 시스템 함수 (예: read, write, close)#include // IP 주소 변환 등 네트워크 함수 (예: htons, htonl 등)#include // 소켓 관련 함수 (예: socket(), bind(), listen(), accept() 등)void error_handling(char *message);// 오류 발생 시 메시지 출력 후 프로그램 종..
C언어 Newwork Study 1
·
C/Study
🌟 구조체더보기정의서로 다른 데이터 타입을 하나로 묶어서 관리할 수 있는 사용자 정의 데이터 타입특징여러 변수를 논리적으로 그룹화메모리 효율적인 데이터 관리복잡한 데이터 구조 표현 가능 🌟 구조체 포인터더보기개념구조체 변수의 주소를 저장하는 포인터활용법 함수에서 구조체 포인터 매개변수로 전달받아 효율적인 메모리 사용동적 메모리 할당과 연계하여 유연한 데이터 구조 구현접근 방법(*포인터명).멤버명 또는 포인터명->멤버명 🌟 파일 입출력더보기기본 개념프로그램과 외부 파일 간의 데이터 교환주요 함수들 fopen(): 파일 열기fclose(): 파일 닫기fprintf(), fscanf(): 형식화된 파일 입출력fread(), fwrite(): 바이너리 파일 입출력 🌟 분활 컴파일더보기목적큰..
C언어 간단한 프로그램 2
·
C/Task
🌟 프로그램 14, 난수 발생 함수를 사용하여 컴퓨터와 대전이 가능한 가위바위보 게임 만들기더보기💻 C언어를 사용해서 간단한 가위바위보 게임💻 사용자는 반복적으로 게임을 진행할 수 있으며, 종료 시에는 승/패/무 결과까지 출력 🎮 기능 소개사용자로부터 가위(1), 바위(2), 보(3), 종료(0) 입력 받기컴퓨터는 랜덤하게 가위, 바위, 보 선택승/패/무 조건 비교 및 결과 출력사용자의 누적 승/패/무 전적 출력 📜 전체 코드#include #include #include // 게임 결과 출력 함수void count(int win, int lose, int draw);// 사용자로부터 입력을 받는 함수int user_input() { int user_choice; while (1) ..
C언어 형변환 개념정리
·
C/Concept
🌟 C언어 타입 캐스팅_정수형더보기들어가기 전에C언어를 배우면서 타입 캐스팅(Type Casting)은 반드시 이해해야 하는 핵심 개념. 특히 16진수 데이터를 다룰 때 더욱 중요해지는데, 지금 실제 코드와 메모리 분석을 통해 타입 캐스팅의 원리를 알아보자타입 캐스팅이란?하나의 데이터 타입을 다른 데이터 타입으로 변환하는 과정. 마치 물을 얼음으로 바꾸는 것처럼, 같은 데이터를 다른 형태로 해석하는 것.캐스팅의 두 가지 방법암시적 캐스팅: 컴파일러가 자동으로 수행명시적 캐스팅: 프로그래머가 직접 지정실습 코드 분석#include void main(){ // 16진수 값을 int 타입 변수에 저장 int iNum = 0x1a2b3c4d; printf("iNum 값: %x\n", iNum)..
C언어 간단한 프로그램 1
·
C/Task
🌟 프로그램 1, 계산기더보기#include // 사칙연산 함수들int add(int a, int b) { return a + b;}int min(int a, int b) { return a - b;}int mul(int a, int b) { return a * b;}int div(int a, int b) { if (b != 0) { return a / b; } else { printf("0으로 나눌 수 없습니다.\n"); return 0; // 오류 처리 }}int per(int a, int b) { if (b != 0) { return a % b; } else { printf("0으로 나눌 수..