⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transport.h

📁 信使小精灵,是一个简易的聊天工具。主要是演示了网络编程的主要步骤。本程序使用封装好的函数库
💻 H
字号:
//transport.h
///////////////////////////////////////////////////////////////////////////////
#ifndef _TRANSPORT_H_
#define _TRANSPORT_H_

/*///////////////////////////////////////////////////////////////////////////* /
#if defined(__cplusplus)
extern "C" {
#endif
/*///////////////////////////////////////////////////////////////////////////*/
///////////////////////////////////////////////////////////////////////////////
#include <winsock2.h>
#include <process.h>

#include "TableInfoMgr.h"
///////////////////////////////////////////////////////////////////////////////
#ifndef IMPORTS
#define DLLENTRY __declspec(dllexport)
#else
#define DLLENTRY __declspec(dllimport)
#endif
	
///////////////////////////////////////////////////////////////////////////////
typedef int TransportBool;
typedef int TransportStatus;
typedef char TransportData;
typedef unsigned long TransportLength;
typedef int TransportError;
typedef unsigned long ULong;
typedef unsigned short UShort;
typedef unsigned long TransportHandle;
	
///////////////////////////////////////////////////////////////////////////////
typedef enum _tagTransportBool
{
	TRANSPORT_FALSE = 0,
	TRANSPORT_TRUE = 1
		
} ETransportBool;

typedef enum _tagTransportStatus
{
	TRANSPORT_UNKNOWN = -2,
	TRANSPORT_ERROR = -1,
	TRANSPORT_OK = 0,

} ETransportStatus;

typedef enum _tagTransportType
{
	Transport_Undefined,
    Transport_Client,
	Transport_Server
	
} ETransportType;


typedef enum _tagTransportEvents
{
	Transport_ReadEv,
	Transport_WriteEv,
	Transport_AcceptEv,
	Transport_ConnectEv,
	Transport_CloseEv
		
} ETransportEvent;


typedef struct _tagTransportAddress
{
	ULong	ip;    /* 4 byte IP address, network format */
	UShort	port;  /* 2 byte port number, host format */
} TransportAddress;

///////////////////////////////////////////////////////////////////////////////
////////////////////////define callback functions//////////////////////////////
/*net event callback*/
typedef void (*LPTRANSPORT_EVENT)(IN SOCKET hSocket, IN ETransportEvent eEvent, 
								  IN void *pDataBuf, IN unsigned long nDataLen, 
								  IN int nError, IN void *pContext);

/*obtain packet size from packet header callback*/
typedef void (*LPTRANSPORT_GETDATABUFLEN)(IN SOCKET hSocket, IN void *pHeaderBuf, 
										  OUT unsigned long *nDataLen);

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
TransportStatus Transport_Init();
TransportStatus Transport_UnInit();

ULong Transport_GetLocalHostIp(OUT char *pIpAddress, IN int nIpBufLen,
								OUT char *pHostName, IN int nHostNameLen);
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

class CTransport
{
public:
	CTransport();
	~CTransport();

	SOCKET Transport_Create(IN ETransportType eType, 
							IN TransportAddress *pLocalAddress,
							IN LPTRANSPORT_EVENT eventHandler, 
							IN LPTRANSPORT_GETDATABUFLEN getDataBufLenCb, 
							IN TransportLength nHeaderStructLen, 
							IN void *pContext);
	TransportStatus Transport_Destory();

	TransportStatus Transport_Connect(IN TransportAddress *pRemoteAddress);
	TransportLength Transport_Send(IN SOCKET hSocket, IN void *pDataBuf, IN TransportLength nDataLen);


public:
	SOCKET GetSocket();
	ETransportType GetTransportType();
	CTableInfoMgr *GetConnectionTable();
	
private:
	SOCKET m_hSocket;
	ETransportType m_eTransportType;
	CTableInfoMgr s_tConnectionTable;	/*connections manager*/

private:
	TransportHandle m_hAcceptThreadHandle;
	TransportHandle m_hReceiveThreadHandle;

};

/*///////////////////////////////////////////////////////////////////////////* /
#if defined(__cplusplus)
}
#endif
/*///////////////////////////////////////////////////////////////////////////*/
#endif	/*_TRANSPORT_H_*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -