From 9be57d2f294687a9283e6d3ed8599def4faf1fec Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 04 三月 2024 13:49:14 +0800 Subject: [PATCH] '功能修改' --- common/SocketManager.cpp | 77 ++++++++++++++++++++++++++++++++++++-- 1 files changed, 72 insertions(+), 5 deletions(-) diff --git a/common/SocketManager.cpp b/common/SocketManager.cpp index c15c9fd..d35b674 100644 --- a/common/SocketManager.cpp +++ b/common/SocketManager.cpp @@ -52,13 +52,80 @@ } } } - - - - closesocket(m_SockClient); if (num < 0) { throw string("未接收到信息"); } return data; -} \ No newline at end of file +} + +string SocketManager::sendMsg(SOCKET m_SockClient, const char* msg) +{ + char buffer[1024]; + int result = send(m_SockClient, msg, strlen(msg), 0); + if (result < 0) { + throw string("发送失败"); + } + int header_length = 10; + int num = recv(m_SockClient, buffer, 1024, 0); + string data = string(buffer, 0, num); + if (data.find("##") == 0) { + //带有头文件 + int count = std::stoi(data.substr(2, header_length - 2)); + data = data.substr(header_length); + while (data.length() < count) { + char buffer[1024]; + num = recv(m_SockClient, buffer, 1024, 0); + if (num > 0) { + data.append(string(buffer, 0, num)); + } + } + } + if (num < 0) { + throw string("未接收到信息"); + } + return data; +} + +SOCKET SocketManager::createSocket(string addr, int port) +{ + WSADATA wsd; + WSAStartup(MAKEWORD(2, 2), &wsd); + SOCKET m_SockClient; + m_SockClient = socket(AF_INET, SOCK_STREAM, 0); + sockaddr_in clientaddr; + clientaddr.sin_family = AF_INET; + clientaddr.sin_port = htons(port); + //clientaddr.sin_addr.S_un.S_addr = ; + inet_pton(AF_INET, addr.c_str(), &clientaddr.sin_addr); + + int c = connect(m_SockClient, (sockaddr*)&clientaddr, sizeof(clientaddr)); + if (c != 0) { + throw string("socket连接失败"); + } + return m_SockClient; +} + +string SocketManager::receiveMsg(SOCKET m_SockClient) +{ + char buffer[1024]; + int header_length = 10; + int num = recv(m_SockClient, buffer, 1024, 0); + if (num <= 0) { + throw string("连接已断开"); + } + string data = string(buffer, 0, num); + if (data.find("##") == 0) { + //带有头文件 + int count = std::stoi(data.substr(2, header_length - 2)); + data = data.substr(header_length); + while (data.length() < count) { + char buffer[1024]; + num = recv(m_SockClient, buffer, 1024, 0); + if (num > 0) { + data.append(string(buffer, 0, num)); + } + } + } + return data; +} -- Gitblit v1.8.0