VS2015 HPSOCK 智能指针静态库-编译步骤

前言:从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"

 

 

 

PACK 模型组件触发监听器对象的 OnReceive ( pSender , dwConnID , pData , iLength )
事件时,会保证 pData 是一个完整的数据包。 PACK 模型组件会对应用程序发送的
每个数据包自动加上 4 字节( 32 位)的包头,组件接收到数据时根据包头信息自
动分包,每个完整数据包通过 OnReceive 事件发送给应用程序。
PACK 包头格式:
XXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYY
 
10 X 为包头标识位,用于数据包校验。有效包头标识取值范围 0 ~ 1023 0x3FF ),
当包头标识等于 0 时不校验包头。后 22 Y 为长度位,记录包体长度。有效数据包最大
长度不能超过 4194303 0x3FFFFF )字节,默认长度限制为: 262144 0x40000 )字节。应
用程序可以通过 SetPackHeaderFlag() SetMaxPackSize() 分别设置包头标识与最大包长限
制。
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值