#ifndef LXZL_TCP_H #define LXZL_TCP_H #include "NetworkRelated.h" #include #include #include #include #include #include /** * TCP套接字 */ class TCPSocket { public: /** 创建套接字 */ void create_socket(); /** 关闭套接字 */ void close_socket(); virtual ~TCPSocket(); /** 套接字状态 */ bool is_connected() const; public: socket_t sockfd_ = INVALID_SOCKET_VALUE; std::atomic connected_{false}; }; /** * TCP客户端 */ class TCPClient : public TCPSocket { public: /** 建立链接 */ void connect(const std::string &ip, uint16_t port); /** 发送数据 */ size_t send(const void *data, size_t size); size_t send(const std::string &data); /** 接收数据,返回数据长度 */ size_t receive(void *buffer, size_t buffer_size); }; /** * TCP服务端 */ class TCPServer : public TCPSocket { public: void listen(uint16_t port, int backlog = SOMAXCONN); std::shared_ptr accept(); }; // 异步客户端(生产者-消费者模式) class AsyncTCPClient : public TCPClient { public: void start_async(); bool try_pop(std::vector &data); ~AsyncTCPClient() override; private: std::thread recv_thread_; std::mutex queue_mutex_; std::condition_variable queue_cv_; std::queue> recv_queue_; std::atomic running_{false}; }; #endif //LXZL_TCP_H