From 55804277909d3734e1cfbd94c17bc19d37280df3 Mon Sep 17 00:00:00 2001 From: mf <2848019546@qq.com> Date: 星期一, 23 十二月 2024 16:37:06 +0800 Subject: [PATCH] Merge branch 'master' of ssh://115.28.86.8:29418/~admin/脸谱AI_0817_1202 This merge integrates the latest updates from the master branch of the remote repository. It includes new features, bug fixes, and performance improvements that were developed in the upstream repository. --- 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