#include "pch.h" #include "SokcetClient.h" #include <iostream> #include <thread> #include <Ws2tcpip.h> #include "StringHelper.h" #include "HeartBeatResponse.h" #include "x2struct/x2struct.hpp" #include <string.h> #include <stdio.h> SokcetClient::SokcetClient() { m_nLocalSocket = -1; WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) std::cout << "Socket版本加载失败" << std::endl; } SokcetClient::~SokcetClient() { closeSocket(); } void SokcetClient::closeSocket() { if (m_nLocalSocket != -1) closesocket(m_nLocalSocket); //关闭socket连接 m_nLocalSocket = -1; WSACleanup(); //终止ws2_32.lib的使用 } //创建一个socket bool SokcetClient::createSocket() { if (m_nLocalSocket == -1) { /* int iMode = 1; WSADATA wsd; //初始化Socket环境 if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) { outputMessage("WSAStartup failed! "); } */ m_nLocalSocket = socket(AF_INET, SOCK_STREAM , IPPROTO_TCP); if (m_nLocalSocket != INVALID_SOCKET) { outputMessage(StringHelper::GBKToUTF8("客服端socket创建成功").c_str()); } /* //调用ioctlsocket()将其设置为非阻塞模式 int retVal = ioctlsocket(m_nLocalSocket, FIONBIO, (u_long FAR*)&iMode); if (retVal == SOCKET_ERROR) { outputMessage("ioctlsocket failed!"); WSACleanup(); }*/ } return false; } bool SokcetClient::Myconnect(const char* ip, const unsigned short prot) { int nRet = SOCKET_ERROR; if (m_nLocalSocket != -1) { sockaddr_in m_nServeraddr; memset(&m_nServeraddr, 0, sizeof(m_nServeraddr)); m_nServeraddr.sin_family = AF_INET; m_nServeraddr.sin_port = htons(prot); m_nServeraddr.sin_addr.s_addr = inet_addr(ip); nRet = connect(m_nLocalSocket, (sockaddr*)&m_nServeraddr, sizeof(m_nServeraddr));//成功返回0。否则返回SOCKET_ERROR if (nRet == SOCKET_ERROR) { outputMessage("服务器连接失败!"); return false; } outputMessage("服务器连接成功!"); //std::string data ="{"bizCode":"B1001","parkingNo":"1000000184","clientNo":"1","reqNo":"201909291613278736","clientName":"大门岗亭","sign":"57DCE7C04A3EF22BF2305281A98A57B2"} "; //std::string strTemp = StringHelper::GBKToUTF8(data); //outputMessage(data.c_str()); //Mysend(strTemp.c_str()); //Myrecv(); return true; } return false; } void SokcetClient::Myrecv() { if (m_nLocalSocket != -1) { int rs = -1; int resultRecv = -1; fd_set rfds; while (true) { int size = sizeof(m_message); memset(m_message, '