#pragma once
#include <string>
using namespace std;
class CTCPSocket
{
public:
CTCPSocket();
~CTCPSocket();
bool SocketInit();
bool Connect(CString strIp, int nPort);
bool Close();
bool SendCmd(CString cmd, int iTimeOut=1);
bool ReceiveMsg(CString& strRecvMsg, int iTimeOut=2);
private:
SOCKET m_Scoket;
WORD m_dwVserion;
WSADATA m_WsData;
int m_iError;
bool m_isSocketFlag;
};
#include "pch.h"
#include "CTCPSocket.h"
#include <string>
#pragma comment(lib, "ws2_32.lib")
CTCPSocket::CTCPSocket()
{
m_dwVserion = 0;
m_isSocketFlag = true;
memset(&m_WsData, 0, sizeof(WSADATA));
}
CTCPSocket::~CTCPSocket()
{
/*closesocket(m_Scoket);
WSACleanup();*/
}
bool CTCPSocket::SocketInit()
{
m_dwVserion = MAKEWORD(1, 1);
m_iError = WSAStartup(m_dwVserion, &m_WsData);
if (m_iError != 0)
{
m_isSocketFlag = false;
}
if (LOBYTE(m_WsData.wVersion) != 1 && HIBYTE(m_WsData.wVersion) != 1)
{
WSACleanup();
m_isSocketFlag = false;
}
return m_isSocketFlag;
}
bool CTCPSocket::Connect(CString strIp, int nPort)
{
if (!m_isSocketFlag)
return false;
m_Scoket = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = inet_addr(strIp);
addr.sin_family = AF_INET;
addr.sin_port = htons(nPort);
m_iError = connect(m_Scoket, (SOCKADDR*)&addr, sizeof(SOCKADDR));
if (m_iError != 0)
m_isSocketFlag = false;
return m_isSocketFlag;
}
bool CTCPSocket::Close()
{
closesocket(m_Scoket);
return true;
}
bool CTCPSocket::SendCmd(CString cmd,int iTimeOut)
{
if (!m_isSocketFlag)
return false;
int timeOut = iTimeOut * 1000; //秒
setsockopt(m_Scoket, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeOut, sizeof(timeOut));
int iRet = send(m_Scoket, cmd, cmd.GetLength(), 0);
if (iRet == 0)
{
return false;
}
return true;
}
bool CTCPSocket::ReceiveMsg(CString& strRecvMsg, int iTimeOut)
{
if (!m_isSocketFlag)
return false;
int timeOut = iTimeOut * 1000; //秒
setsockopt(m_Scoket, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeOut, sizeof(timeOut));
char recvBuf[1024] = { 0 };
int iRet = recv(m_Scoket, recvBuf, sizeof(recvBuf), 0);
if (iRet == -1)
{
return false;
}
string recvMsg = string(recvBuf);
strRecvMsg = recvMsg.c_str();
}