/
gerrero
/
tcp_chat
Обзор
Документация
Войти
/
gerrero
/
tcp_chat
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/client/device_connect.cpp
73 строки
2 KB
gerrero
create: client, server, protocol.h, data_provider.h, data_test.cpp, data_test.h, device_connect.cpp, device_connect.h, tcp_client.cpp, tcp_client.h, tcp_server.cpp, tcp_server.h, Makefile, README.md
04 май 2026, 11:19
Верифицирован
04 май 2026, 11:19
98096c3
Код
Авторство
О чём код?
#include "device_connect.h" #include "../../include/common/protocol.h" #include <iostream> #include <arpa/inet.h> #include <unistd.h> DeviceConnect::DeviceConnect(const std::string& ip, int port) : device_ip(ip), device_port(port), sock(-1), connected(false) {} DeviceConnect::~DeviceConnect() { if (sock != -1) close(sock); } bool DeviceConnect::connect() { sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { std::cerr << "[DeviceConnect] Ошибка создания сокета\n"; return false; } struct sockaddr_in addr{}; addr.sin_family = AF_INET; addr.sin_port = htons(device_port); if (inet_pton(AF_INET, device_ip.c_str(), &addr.sin_addr) <= 0) { std::cerr << "[DeviceConnect] Неверный IP устройства\n"; close(sock); sock = -1; return false; } if (::connect(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) { std::cerr << "[DeviceConnect] Устройство недоступно на " << device_ip << ":" << device_port << "\n"; close(sock); sock = -1; return false; } connected = true; std::cout << "[DeviceConnect] Подключено к устройству " << device_ip << ":" << device_port << "\n"; return true; } bool DeviceConnect::isConnected() const { return connected; } bool DeviceConnect::sendAndReceive(const uint8_t* request, uint8_t* response, size_t len) { if (!connected) return false; // Отправляем запрос устройству if (!sendAll(sock, request, len)) { std::cerr << "[DeviceConnect] Ошибка отправки устройству\n"; return false; } // Получаем ответ if (!recvAll(sock, response, len)) { std::cerr << "[DeviceConnect] Ошибка приёма от устройства\n"; return false; } return true; } bool DeviceConnect::getReferencePacket(uint8_t* out, size_t len) { // Получить от устройста эталонный пакет uint8_t request[PACKET_SIZE] = {0}; request[0] = 0x01; // "GET_REFERENCE" return sendAndReceive(request, out, len); } // Получить от устройста измененный пакет bool DeviceConnect::getModifiedPacket(uint8_t* out, size_t len) { uint8_t request[PACKET_SIZE] = {0}; request[0] = 0x02; // "GET_MODIFIED" return sendAndReceive(request, out, len); }