윈도우 HeidiSQL 설치 및 외부접속
·
카테고리 없음
https://www.heidisql.com/download.php#윈도우 파워쉘에 명령어 입력하면 금방 설치할 수 있음Installation per PowerShell: winget install HeidiSQL.HeidiSQL1.신규2. SSH tunnel3. ip주소 입력4. 사용자/pw 입력5. 열기완료
7/23 MainWindow.xaml 수정 전 코드
·
카테고리 없음
WPF) 기능별로 정리된 깔끔한 XAML 코드 요청 GPT 프롬프트
·
카테고리 없음
*나는 "기능별로 정리된 깔끔한 XAML 형식" 이라고 지정 해두었음 📌 “기능별로 정리된 깔끔한 XAML 형식으로 만들어줘. 각 UI 영역을 Grid.RowDefinitions로 나누고, 주석은 이모지와 함께 구역별로 달아줘. StackPanel, GroupBox, Border 등을 써서 레이아웃 정돈되게 구성해줘.” ✅ 가장 간단하게 말하는 방법“지난번처럼 기능별로 주석 정리된 깔끔한 XAML 코드로 만들어줘”✅ 조금 더 명확하게 말하는 방법“각 기능별로 주석이 달려 있고 Grid.RowDefinitions, StackPanel, GroupBox 등을 사용한 깔끔한 WPF UI XAML 코드 형식으로 만들어줘”✅ 구체적인 예시“Mic 설정 화면을 만들고 싶은데, 지난 MachineEar 마이크 UI..
0721 머신이어 마이크
·
프로젝트
using Microsoft.VisualBasic;using Microsoft.Win32;using NAudio.Wave;using Newtonsoft.Json;using ScottPlot;using SkiaSharp;using SkiaSharp.Views.WPF;using System.Collections.Generic;using System.Diagnostics;using System.IO;using System.Net;using System.Net.NetworkInformation; // MAC 주소 관련using System.Net.Sockets;using System.Text;using System.Threading;using System.Timers;using System.Windows;us..
GitHub 리포지토리 복사 시 유의점
·
카테고리 없음
리포지토리 주소와 폴더 주소의 차이올바른(복제 가능한) 리포지토리 주소:https://github.com/swharden/Csharp-Data-Visualization.git지금 입력한 주소(문제의 주소):https://github.com/swharden/Csharp-Data-Visualization/tree/main/projects/maui-audio-monitor→ 이 주소는 maui-audio-monitor라는 폴더의 경로입니다.→ Git은 항상 리포지토리 단위로만 clone이 가능하며, 폴더 단위로는 불가능합니다.
QT 객체 생성
·
카테고리 없음
예를들어 키오스크의 경우하나의 화면 안에 여러개의 메뉴가 들어있다.무수히 많은 메뉴를 일일히 위젯을 넣어서 만들면 시간낭비며 비효율적이다.이럴 땐 객체를 만들어서 틀을 정해놓은 다음 안에 내용만 달라지게 해서 객체를 복사하면 된다.
send data 수정 전
·
카테고리 없음
// ✅ [4] 현재 이미지 UI에 표시/*void MainWindow::displayCurrentImage(){ if (currentIndex >= 0 && currentIndex frame_MONO->layout(); if (!layoutMono) { layoutMono = new QVBoxLayout(ui->frame_MONO); layoutMono->setContentsMargins(0, 0, 0, 0); ui->frame_MONO->setLayout(layoutMono); } else { QLayoutItem* item; ..
c++ 바이너리 이미지 송신 코드분석
·
카테고리 없음
// 클라이언트에게 이미지 파일을 바이너리로 전송하는 함수bool send_image(int client_sock, const std::string& filepath) { // [1] 파일 경로가 비어있으면 에러 반환 if (filepath.empty()) { std::cerr (ftell(file)); // 현재 위치 = 파일 크기 rewind(file); // 파일 포인터 처음으로 되돌리기 std::cout > 8) & 0xFF; size_bytes[2] = (filesize >> 16) & 0xFF; size_bytes[3] = (filesize >> 24) & 0xFF; // [5] 먼저 이미지 크기 4바이트 전송 send(client_s..
onReadyRead 수정 전/후
·
카테고리 없음
수정 전void ImageSocketManager::onReadyRead() { // 1. 이미지 크기 먼저 수신 (4바이트) if (imageSize == 0 && m_socket->bytesAvailable() >= 4) { QByteArray sizeBytes = m_socket->read(4); imageSize = (quint8)sizeBytes[0] | ((quint8)sizeBytes[1] bytesAvailable() > 0 && bytesReceived read(qMin(1024, imageSize - bytesReceived)); buffer.append(chunk); bytesReceived..
cart_show :: cart_id 받는 버전
·
카테고리 없음
json handle_cart_show(const json& data) { json response; MYSQL* conn = connect_db(); MYSQL_RES* res; MYSQL_ROW row; // 1. 요청/입력 로그 std::cout 0) { response["status"] = "success"; response["items"] = items; std::cout
cart_show
·
카테고리 없음
클라이언트가 보내는 데이터: CART_ID CART_INFO 에서 TOTAL_PRICEQUANTITYCART_DETAIL_INFO 에서SMALL_OPT_NAMESMALL_OPT_PRICE+MENU_NAME (CART_ID로 CART_INFO에서 MENU_ID를 찾고 MENU_ID로 MENU_INFO에 가서 MENU_NAME을 가져옴)ST_NAME (MENU_INFO 에서 ST_ID를 찾아서 ST_ID로 ST_INFO 테이블에 가서 ST_NAME 가져옴)SELECT ci.CART_ID, ci.TOTAL_PRICE, ci.QUANTITY, ci.MENU_ID, mi.MENU_NAME, mi.ST_ID, si.ST_NAME, cdi.SMALL_OPT_NAME, ..
add_cart 를 클라이언트 방식에 맞추기 전/후
·
카테고리 없음
전json handle_cart_add(const json& data) { json response; // 1. 필수 필드 검사 (CART_INFO용) if (!data.contains("USER_ID") || !data.contains("MENU_ID") || !data.contains("QUANTITY") || !data.contains("TOTAL_PRICE")) { response["role"] = "server"; response["action"] = "cart_add"; response["status"] = "error"; response["message"] = "필수 데이터 누락 (USER_ID, MENU_I..
쿠팡이츠) store_selet 요청 JOIN 사용 전/후
·
카테고리 없음
쿼리문 JOIN 사용 전 :: 복합구조json handle_store_select(const json& data) { json response; // [1] 요청 데이터 유효성 검사 if (!data.contains("ST_ID") || !data["ST_ID"].is_number()) { return { {"role", "server"}, {"action", "store_select"}, {"status", "error"}, {"message", "ST_ID 누락 또는 형식 오류"} }; } int st_id = data["ST_ID"]; MYSQL* conn = co..
바이너리 이미지 DB에 저장해서 쓰기
·
카테고리 없음
이미지 파일을 DB에 저장하는 방식이미지 파일 → 바이너리 데이터(바이트 배열) 변환 → DB의 BLOB 타입 컬럼에 저장이미지 조회 시 DB에서 BLOB 데이터를 꺼내서 서버가 바이너리로 클라이언트에 전송MySQL(BLOB) 기반 저장 방식 예시CREATE TABLE store_images ( ST_ID INT PRIMARY KEY, IMAGE_DATA LONGBLOB NOT NULL); LONGBLOB 타입은 대용량 바이너리 데이터를 저장할 수 있음C++ MySQL 바이너리 데이터 저장 예시 bool save_image_to_db(MYSQL* conn, int st_id, const std::string& image_path) { FILE* file = fopen(image_path...
터미널로 서버코드 열기
·
카테고리 없음
1. 서버코드가 있는 폴더에 간다2. 오른쪽 마우스 클릭3. 터미널 열기4. ./server 입력한다 tip 해당 터미널을 디스코드 방송으로 송출하면 팀원들이 보기 편하다.
쿠팡이츠 서버 - 주문관련 클라이언트 요청 처리 메서드
·
카테고리 없음
1. handle_store_detail(const json& data)입력: { "store_id": 1 }출력: 해당 가게의 모든 메뉴 + 메뉴옵션 (JSON 포함 중첩 구조)2. handle_cart_add(const json& data)입력: 장바구니에 추가할 메뉴 ID, 수량, 선택한 옵션 정보 등동작: 장바구니 테이블에 insert3. handle_cart_update(const json& data)입력: 장바구니 항목 ID, 변경 수량, 변경된 옵션동작: 장바구니 항목 업데이트4. handle_cart_delete(const json& data)입력: 장바구니 항목 ID동작: 장바구니 항목 삭제5. handle_cart_checkout(const json& data)입력: 사용자 ID + 장..
쿠팡이츠 회원가입 해시버전 코드
·
카테고리 없음
// 회원가입// json handle_customer_signup2(const json& data) // 해시버전// {// json result;// if (!data.contains("USER_LOGIN_ID") || !data.contains("USER_LOGIN_PW")) {// result["status"] = "error";// result["message"] = "아이디 또는 비밀번호가 누락되었습니다.";// return result;// }// string id = data["USER_LOGIN_ID"];// string pw = data["USER_LOGIN_PW"];// string hashed_pw..
C++ mysql task.json
·
카테고리 없음
c++에서 db를 연결하는데 아무런 이유없이 실행이 안될 때task.json을 아래 내용으로 갈아끼우면 잘 됨{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ 활성 파일 빌드 (MySQL 포함)", "command": "/usr/bin/g++", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-I/usr/inc..
쿠팡이츠 - 스레드별 클라이언트 처리
·
카테고리 없음
📨 예시 JSON 메시지{ "role": "customer", "type": "create_order", "data": { "user_id": "kim123", "store_id": "bbq001", "menu": [ { "item_id": "m001", "qty": 2 }, { "item_id": "m005", "qty": 1 } ], "address": "서울 강남구 어딘가" }} ✅ 클라이언트 스레드 핸들러void handle_client(int client_sock) { char buffer[BUFFER_SIZE]; while (true) { memset(buffer, 0, BUFFER_SIZE); // 버퍼 초기화 (..
팡팡이츠 - SocketManager를 응용한 처리 코드 [채팅/주문]
·
카테고리 없음
✅ 1. 채팅 처리 로직📤 클라이언트 → 서버: 채팅 보내기 void sendChatMessage(const QString& from, const QString& to, const QString& message) { QJsonObject data; data["from"] = from; data["to"] = to; data["message"] = message; QJsonObject request; request["action"] = "chat_send"; request["data"] = data; QJsonDocument doc(request); QByteArray msg = doc.toJson(QJsonDocument::Compact) + "\n"; ..