#pragma once #ifndef SOCKET_COMM_H #define SOCKET_COMM_H #include #include #include #include #include #pragma comment(lib, "ws2_32.lib") class SocketComm { public: SocketComm(); ~SocketComm(); bool createClientSocket(const std::string& serverIP, uint16_t serverPort); // ¿Í»§¶Ë bool createServerSocket(uint16_t port); // ·þÎñ¶Ë£¨¼àÌý£© // ÐÂÔö£º·Ç×èÈû accept/ÊÕ·¢/¹Ø±ÕÖ¸¶¨¿Í»§¶Ë bool acceptOne(SOCKET& outClient, std::string& outIp, uint16_t& outPort); bool recvFrom(SOCKET s, std::vector& buffer, bool& peerClosed); // ¿ÉÑ¡£ºÎªÁ˼æÈݾɵ÷Ó㬱£ÁôÒ»¸öÄÚÁª°ü×°£¨Èç¹ûÆäËüµØ·½»¹Óõ½Á˾ÉÇ©Ãû£© inline bool recvFrom(SOCKET s, std::vector& buffer) { bool closed = false; return recvFrom(s, buffer, closed); } bool sendTo(SOCKET s, const std::vector& data); void closeClient(SOCKET s); void closeSocket(); // ¹Ø±Õ¼àÌý»òµ¥Á¬½Ó // ¹©ÉϲãÅжϱ¾¶ÔÏóµ±Ç°ÊÇ·ñÊÇ¡°¼àÌýģʽ¡± bool isListening() const { return listenSock != INVALID_SOCKET; } bool sendDataSingle(const std::vector& data); // ¿Í»§¶Ëµ¥Á¬½Ó·¢ËÍ bool recvSingle(std::vector& buffer); // ¿Í»§¶Ëµ¥Á¬½Ó½ÓÊÕ private: SOCKET listenSock = INVALID_SOCKET; // ¼àÌý socket£¨·þÎñ¶Ë£© SOCKET sock = INVALID_SOCKET; // µ¥Á¬½Óģʽ£¨¿Í»§¶ËʱÓã© WSADATA wsaData{}; bool setNonBlocking(SOCKET s, bool nb); }; #endif // SOCKET_COMM_H