From f9f7ee1b63e6009e0f67ec62ddffd5b6447cb2e1 Mon Sep 17 00:00:00 2001 From: zh_What <1445177624@qq.com> Date: 星期四, 05 十二月 2024 11:03:59 +0800 Subject: [PATCH] 考勤识别与管理文档 --- GroupB_马喜龙/Client/周浩/code/存放代码.txt | 122 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 122 insertions(+), 0 deletions(-) diff --git "a/GroupB_\351\251\254\345\226\234\351\276\231/Client/\345\221\250\346\265\251/code/\345\255\230\346\224\276\344\273\243\347\240\201.txt" "b/GroupB_\351\251\254\345\226\234\351\276\231/Client/\345\221\250\346\265\251/code/\345\255\230\346\224\276\344\273\243\347\240\201.txt" index e69de29..0037255 100644 --- "a/GroupB_\351\251\254\345\226\234\351\276\231/Client/\345\221\250\346\265\251/code/\345\255\230\346\224\276\344\273\243\347\240\201.txt" +++ "b/GroupB_\351\251\254\345\226\234\351\276\231/Client/\345\221\250\346\265\251/code/\345\255\230\346\224\276\344\273\243\347\240\201.txt" @@ -0,0 +1,122 @@ +#include "stdafx.h" +#include <iostream> +#include <opencv2/opencv.hpp> + +#if defined(_WIN32) +#include <winsock2.h> +#include <ws2tcpip.h> +#pragma comment(lib, "ws2_64.lib") +#endif + +// 鎹曡幏鎽勫儚澶村浘鍍� +cv::Mat captureImage() { + cv::VideoCapture cap(0); // 鎵撳紑榛樿鎽勫儚澶达紝鍙寜闇�鏇存敼鍙傛暟閫夋嫨鍏朵粬鎽勫儚澶� + if (!cap.isOpened()) { + std::cerr << "鏃犳硶鎵撳紑鎽勫儚澶�" << std::endl; + return cv::Mat(); + } + cv::Mat frame; + cap >> frame; + cap.release(); + return frame; +} + +// 杩炴帴鏈嶅姟绔嚱鏁� +bool connectToServer(SOCKET& clientSocket) { + // 閰嶇疆鏈嶅姟绔湴鍧�淇℃伅 + sockaddr_in serverAddr; + serverAddr.sin_family = AF_INET; + serverAddr.sin_port = htons(8888); // 绔彛鍙�8888锛屽彲鎸夐渶淇敼 + + // 浣跨敤inet_pton鏇挎崲inet_addr + char ipAddress[] = "127.0.0.1"; // 鏈湴鍥炵幆鍦板潃锛屼篃鍙浛鎹负鐪熷疄IP锛岃繖閲屽畾涔変负瀛楃鏁扮粍 + int inetResult = inet_pton(AF_INET, ipAddress, &serverAddr.sin_addr); + if (inetResult <= 0) { + std::cerr << "IP鍦板潃杞崲澶辫触" << std::endl; + return false; + } + + // 鍒涘缓濂楁帴瀛� + clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (clientSocket == INVALID_SOCKET) { + std::cerr << "鍒涘缓濂楁帴瀛楀け璐�" << std::endl; +#if defined(_WIN32) + WSACleanup(); +#endif + return false; + } + + // 杩炴帴鏈嶅姟绔� + if (connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { + std::cerr << "杩炴帴鏈嶅姟绔け璐�" << std::endl; +#if defined(_WIN32) + closesocket(clientSocket); + WSACleanup(); +#endif + return false; + } + return true; +} + +// 灏嗗浘鐗囨暟鎹彂閫佸埌鏈嶅姟绔嚱鏁� +void sendImage(SOCKET socket, const cv::Mat& image) { + std::vector<uchar> buffer; + cv::imencode(".jpg", image, buffer); // 灏嗗浘鍍忕紪鐮佷负 JPEG 鏍煎紡锛屾柟渚夸紶杈� + // 鍙戦�佹暟鎹暱搴︿俊鎭紙鍋囪鏈嶅姟绔寜杩欎釜绾﹀畾鏉ユ帴鏀讹級 + int bufferSize = buffer.size(); + send(socket, (const char*)&bufferSize, sizeof(bufferSize), 0); + // 鍙戦�佸浘鍍忔暟鎹湰韬� + send(socket, (const char*)buffer.data(), buffer.size(), 0); +} + +// 浠庢湇鍔$鎺ユ敹娑堟伅鍑芥暟 +std::string receiveMessage(SOCKET socket) { + const int bufferSize = 1024; + char buffer[bufferSize]; + int bytesReceived = recv(socket, buffer, bufferSize - 1, 0); + if (bytesReceived > 0) { + buffer[bytesReceived] = '\0'; // 娣诲姞瀛楃涓茬粨鏉熺 + return std::string(buffer); + } + return ""; +} + +int main() { +#if defined(_WIN32) + // 鍒濆鍖朩insock搴� + WSADATA wsaData; + int result = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (result != 0) { + std::cerr << "WSAStartup 澶辫触: " << result << std::endl; + return -1; + } +#endif + + SOCKET clientSocket; + if (!connectToServer(clientSocket)) { + return -1; + } + + cv::Mat image = captureImage(); + if (image.empty()) { + // 鍏抽棴濂楁帴瀛楀苟娓呯悊锛圵indows涓嬶級 +#if defined(_WIN32) + closesocket(clientSocket); + WSACleanup(); +#endif + return -1; + } + + sendImage(clientSocket, image); + std::string receiveResult = receiveMessage(clientSocket); + std::cout << "鎵撳崱缁撴灉锛� " << receiveResult << std::endl; + + // 鍏抽棴濂楁帴瀛楀苟娓呯悊锛圵indows涓嬶級 +#if defined(_WIN32) + closesocket(clientSocket); + WSACleanup(); +#else + close(clientSocket); +#endif + return 0; +} \ No newline at end of file -- Gitblit v1.8.0