/* * TcpSeriver.h * * Created on: 2025年6月27日 * Author: July */ #ifndef SRC_MODBUSTCP_SLAVE_TCPSERIVER_H_ #define SRC_MODBUSTCP_SLAVE_TCPSERIVER_H_ #include #include #include #include #include #include #include #include #ifndef __arm__ #include #else #include #include #endif using namespace stt::util; class STTTcpSeriver { public: void Run() { if (listen_st <= 0) listen_st = Util::socketCreate(8080, 1); if (listen_st <= 0) return; //发送接受逻辑 std::thread([&]() { while (1) { Util::sleepfor(20); { std::lock_guard lock(clientsMutex); //轮询遍历连接客户端 for (auto client : clients) { //接受或者发送客户端消息; char buffer[1024]; int Readnum = recv(client, buffer, 256, 0); if (Readnum > 0) { //打印字符串 buffer[Readnum] = '\0'; std::cout << "Received data: " << buffer << std::endl; string ReadBuf(buffer); getRuntime()->getIVarMgr()->setChar("接受缓存变量", ReadBuf); //打印原始16进制数据 for (int i = 0; i < Readnum; i++) { printf("%02X ", (unsigned char) buffer[i]); } std::cout << endl; } //如果收到数据大小为0则客户端断开连接 if (Readnum == 0) { auto it = std::find(clients.begin(), clients.end(), client); if (it != clients.end()) { clients.erase(it); } Util::socketClose(client); std::cout << "Disconnect! "<< std::endl; } } } } }).detach(); //这里循环接受新的客户端连接 while (1) { Util::sleepfor(1000); int client_st = Util::socketAccept(listen_st); if (client_st == -1) { perror("accept"); continue; } { std::lock_guard lock(clientsMutex); clients.push_back(client_st); std::cout << "Connect Success! "<< std::endl; } } }; public: int listen_st; int iPort; std::mutex clientsMutex; std::vector clients; }; #endif /* SRC_MODBUSTCP_SLAVE_TCPSERIVER_H_ */