前言:从qq群里下载版本后,解压出来
1:首先把以下目录复制出来放在工程目录
hp-socket-5.7.1\Windows
2:打开目录 hp-socket-5.7.1\Windows\Project
2.1 运行 HPSocket-2015.sln
2.2 由于我是C++,需要静态库, 只编译HPSocketLiB的四种版本即可,分别是:
Debug-win32 ,Release-win32,Debug-x64 ,Release-x64,
编译后的文件应是路径:
Release-x64的路径:hp-socket-5.7.1\Windows\Bin\HPSocket\x64\static\HPSocket.lib
Debug-x64的路径:hp-socket-5.7.1\Windows\Bin\HPSocket\x64\static\HPSocket_D.lib
Release-win32的路径:hp-socket-5.7.1\Windows\Bin\HPSocket\x86\static\HPSocket.lib
Debug-win32的路径:hp-socket-5.7.1\Windows\Bin\HPSocket\x86\static\HPSocket_D.lib
如果不需要其它的组件,可以通过禁用以下宏来过滤,该头文件:HPTypeDef.h
//#define _UDP_DISABLED // 禁用 UDP
//#define _SSL_DISABLED // 禁用 SSL
//#define _HTTP_DISABLED // 禁用 HTTP
//#define _ZLIB_DISABLED // 禁用 ZLIB
3:静态 库编 译好后,我们来新建 工程,拿pack模型为例,我们在hp-socket-5.7.1\Windows下新建一个MFC工程
新工程名为:Test_PackServer
Test_PackServerDlg.h
#pragma once
#include "../../Windows/Include/HPSocket/HPSocket.h"
#ifdef _WIN64
#ifdef _DEBUG
#pragma comment(lib, "../../Windows/Bin/HPSocket/x64/static/HPSocket_D.lib")
#else
#pragma comment(lib, "../../Windows/Bin/HPSocket/x64/static/HPSocket.lib")
#endif
#else
#ifdef _DEBUG
#pragma comment(lib, "../../Windows/Bin/HPSocket/x86/static/HPSocket_D.lib")
#else
#pragma comment(lib, "../../Windows/Bin/HPSocket/x86/static/HPSocket.lib")
#endif
#endif
// CTest_PackServerDlg 对话框
class CTest_PackServerDlg : public CDialog, public CTcpServerListener
{
// 构造
public:
CTest_PackServerDlg(CWnd* pParent = NULL); // 标准构造函数
// CMyHpSrc_ServerPack m_Server;
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_TEST_PACKSERVER_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
private:
CTcpPackServerPtr m_Server;
private:
virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen);
virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);
virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);
virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode);
virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, SOCKET soClient);
virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID);
virtual EnHandleResult OnShutdown(ITcpServer* pSender);
};
Test_PackServerDlg.cpp
CTest_PackServerDlg::CTest_PackServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(IDD_TEST_PACKSERVER_DIALOG, pParent),m_Server(this)
{
// 上面的m_Server(this) 为初始智能指针,这个一定不能省,否则生效不了
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
// 函数重载部分
EnHandleResult CTest_PackServerDlg::OnPrepareListen(ITcpServer* pSender, SOCKET soListen)
{
TCHAR szAddress[50];
int iAddressLen = sizeof(szAddress) / sizeof(TCHAR);
USHORT usPort;
pSender->GetListenAddress(szAddress, iAddressLen, usPort);
return HR_OK;
}
EnHandleResult CTest_PackServerDlg::OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
{
return HR_OK;
}
EnHandleResult CTest_PackServerDlg::OnReceive(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
{
if (pSender->Send(dwConnID, pData, iLength))
return HR_OK;
else
return HR_ERROR;
}
EnHandleResult CTest_PackServerDlg::OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
{
return HR_OK;
}
EnHandleResult CTest_PackServerDlg::OnAccept(ITcpServer* pSender, CONNID dwConnID, SOCKET soClient)
{
return HR_OK;
}
EnHandleResult CTest_PackServerDlg::OnHandShake(ITcpServer* pSender, CONNID dwConnID)
{
return HR_OK;
}
EnHandleResult CTest_PackServerDlg::OnShutdown(ITcpServer* pSender)
{
return HR_OK;
}
静态库必须设置以下选项,否则会各种报错
项目->属性->C/C++-预处理 器->预处理 器定义:HPSOCKET_STATIC_LIB
总结: 如果需要 使用SSL的那么再 定义头文件
#include "../../Windows/Include/HPSocket/HPSocket-SSL.h"