废话不多说, 直入主题, 我们在写客户单的时候希望在哪里发消息出去,然后在哪里返回消息(同步), 然后继续往下运行-, 而不是在这里发送了一个消息给服务端, 在另一个地方接受消息(异步) , 也不知道等多久, 才收到消息, 等收到消息在通知发送消息的地方, 让程序继续往下运行, 这样想想异步实在太麻烦了,
实现同步的思想: 1 将socket设置成阻塞的, 2: 设置接受超时, 3: 消息类型区分
直接上代码
封装socket 头文件
#pragma once
#include <string>
#include <Winsock2.h>
using namespace std;
class TcpSocket
{
public:
TcpSocket();
~TcpSocket();
bool SocketInit();
bool CreatSocket(string strIp, int nPort);
bool SendMsg(int msgType, string strSendBuf, string& strRecvMsg, int iTimeOut);
private:
SOCKET m_Scoket;
DWORD m_dwVserion;
WSADATA m_WsData;
int m_iError;
bool m_isSocketFlag;
};
socket封装实现
#include "TcpSocket.h" #pragma comment(lib, "ws2_32.lib") #pragma warning(disable:4996) TcpSocket::TcpSocket() { m_dwVserion = 0; m_isSocketFlag = true; memset(&m_WsData, 0, sizeof(WSADATA)); } TcpSocket::~TcpSocket() { closesocket(m_Scoket); WSACleanup(); } bool TcpSocket::SocketInit() { m_dwVserion = MAKEWORD(1, 1); m_iError = WSAStartup(m_dwVserion, &m_WsData);