From e8a27bb203fe2aff70390a5eca002d7438da9b0f Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 22 十月 2025 14:24:34 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/DAQBridge/net/SocketComm.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/DAQBridge/net/SocketComm.h b/SourceCode/Bond/DAQBridge/net/SocketComm.h
new file mode 100644
index 0000000..7e6746e
--- /dev/null
+++ b/SourceCode/Bond/DAQBridge/net/SocketComm.h
@@ -0,0 +1,48 @@
+#pragma once
+#ifndef SOCKET_COMM_H
+#define SOCKET_COMM_H
+
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <string>
+#include <vector>
+#include <iostream>
+
+#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<uint8_t>& buffer, bool& peerClosed);
+
+ // 可选:为了兼容旧调用,保留一个内联包装(如果其它地方还用到了旧签名)
+ inline bool recvFrom(SOCKET s, std::vector<uint8_t>& buffer) {
+ bool closed = false;
+ return recvFrom(s, buffer, closed);
+ }
+ bool sendTo(SOCKET s, const std::vector<uint8_t>& data);
+ void closeClient(SOCKET s);
+
+ void closeSocket(); // 关闭监听或单连接
+
+ // 供上层判断本对象当前是否是“监听模式”
+ bool isListening() const { return listenSock != INVALID_SOCKET; }
+ bool sendDataSingle(const std::vector<uint8_t>& data); // 客户端单连接发送
+ bool recvSingle(std::vector<uint8_t>& buffer); // 客户端单连接接收
+
+private:
+ SOCKET listenSock = INVALID_SOCKET; // 监听 socket(服务端)
+ SOCKET sock = INVALID_SOCKET; // 单连接模式(客户端时用)
+ WSADATA wsaData{};
+
+ bool setNonBlocking(SOCKET s, bool nb);
+};
+
+#endif // SOCKET_COMM_H
--
Gitblit v1.9.3