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

📄 tcpip.h

📁 这个是应用了很多工程的TCPIP通讯库
💻 H
字号:
#if !defined(TCPIP_H)
#define TCPIP_H

#include <ItkDef.h>

class CTcpIp
{
public:
	EXPORT32 CTcpIp(IN const TCHAR *szAppName,
					IN const TCHAR *szIpAddress,
					IN const BOOL bClient = TRUE,
					IN const BOOL bTcp = TRUE,
					IN void  (CALLBACK *lpfnRcvCallback)(DWORD, DWORD, LPWSAOVERLAPPED, DWORD) = NULL,
					IN void  *pCallbackParam = NULL,
					IN OPTIONAL void (*lpfnMsgDisplay)(const TCHAR *) = NULL,
					IN OPTIONAL void  (CALLBACK *lpfnTcpServerCallback)(void *,SOCKET, DWORD) = NULL,
					IN OPTIONAL void  (CALLBACK *lpfnUdpServerCallback)(void *,SOCKADDR, DWORD) = NULL,
					IN OPTIONAL const unsigned short int uListenPortNumber = 0,
					IN OUT OPTIONAL unsigned char *pServerBuf = NULL,
					IN OPTIONAL DWORD dwBufSize = 0);

	EXPORT32 ~CTcpIp(void);

	EXPORT32 DWORD	Open(void);
	EXPORT32 DWORD	Close(void);
	EXPORT32 DWORD	Connect(unsigned short int);
	EXPORT32 DWORD  DisConnect(void);
	EXPORT32 DWORD  Send(IN unsigned char *, IN DWORD);
	EXPORT32 DWORD  Send(IN SOCKET, IN unsigned char *, IN DWORD);
	EXPORT32 DWORD  Send(IN SOCKADDR , IN unsigned char *, IN DWORD);
	EXPORT32 DWORD  Receive(OUT unsigned char *, IN DWORD, OUT DWORD *);
	EXPORT32 DWORD  SetSocketBufferOptions (IN const TCHAR *, IN int,
											IN const TCHAR *, IN int, OUT int *);
	EXPORT32 DWORD  GetSocketBufferOptions (OUT TCHAR *, IN OUT int *,
											OUT TCHAR *, IN OUT int *, OUT int *);
	EXPORT32 DWORD  GetSocketTmoOptions (OUT TCHAR *, IN OUT int *, OUT TCHAR *,
										 IN OUT int *, OUT int *);
	EXPORT32 DWORD GetConnectState(void);

private:
	TCHAR				m_szLocalNodename[MAX_PATH],
						m_szLocalIpAddress[32],
						m_szAppName[MAX_PATH],
						m_szIpAddress[32];

	SOCKET				m_Socket;

	struct sockaddr_in	m_sSocketAddress;
	struct sockaddr_in	m_sRemoteAddress;
	int					m_nSocketAddressSize;
	int					m_nRemoteAddressSize;

	DWORD				m_dwConnectState,
						m_dwStatus,
						m_dwReadThreadId,
						m_dwListenThreadId,
						m_dwReceiveThreadId;

	unsigned long		m_lIpAddress;

	unsigned short int	m_uPortNumber;
	
	unsigned char		m_cReadBuffer;

	void                (*m_lpfnMsgDisplay)(const TCHAR *);

	void				(CALLBACK *m_lpfnRcvCallback)(DWORD, DWORD, LPWSAOVERLAPPED, DWORD);
	void				(CALLBACK *m_lpfnTcpServerCallback)(void *, SOCKET , DWORD);
	void				(CALLBACK *m_lpfnUdpServerCallback)(void *, SOCKADDR , DWORD);
	
	BOOL				m_bSocketState;
	BOOL				m_bClient;
	BOOL				m_bStop;
	BOOL				m_bTcp;

	OVERLAPPED			m_WriteOverlapped;
	OVERLAPPED			m_ReadOverlapped;

	HANDLE				m_hReadThread;
	HANDLE				m_hListenThread;
	HANDLE				m_hReceiveThread;
	HANDLE				m_pCallbackParam;

	unsigned char		*m_pServerBuf;
	DWORD				m_dwServerBufSize;

	// Critical Sections 
	CRITICAL_SECTION m_hConnectionListCS;

	struct hostent		*m_sHost;

	CPtrArray			m_InConnections;	// Holder for connections


	unsigned long		GetAddr(IN const TCHAR *);
	void				ReportConnectError(IN TCHAR *, IN BOOL);

	static BOOL ConnectHandler(IN LPVOID);
	static BOOL ListenHandler(IN LPVOID);
	static BOOL ReceiveTcpHandler(IN LPVOID);
	static BOOL ReceiveUdpHandler(IN LPVOID);

	DWORD	ServerReceive(IN SOCKET ClientSocket, OUT unsigned char *pBuf, IN DWORD dwSize,
							   OUT DWORD *dwActualSize, IN void  *pCallbackParam,
							   	IN void  (CALLBACK *lpfnSrvRcvCallback)(DWORD dwError, DWORD dwTransferred, 
								LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) );

	DWORD	CloseAllConnections(void);
	DWORD	CloseConnection(IN SOCKET ClientSocket);
	DWORD	Set_Socket_Options (IN SOCKET NewSocket);

	inline void DisplayMessage(IN const TCHAR *szStr)
	{
		if (m_lpfnMsgDisplay)
			(*m_lpfnMsgDisplay)(szStr);
	}
};

void CALLBACK ServerRcvCallback(IN DWORD dwError, IN DWORD cbTransferred, 
							  IN LPWSAOVERLAPPED lpOverlapped, IN DWORD dwFlags);

#define DRV_CONNECTED			1
#define DRV_NOT_CONNECTED		2
#define DRV_CONNECTING			3
#define DRV_CONNECT_FAILED		4
#define DRV_SOCKET_NONBLOCKING	5
#define DRV_ACCEPT_ERROR		6
#define DRV_RECV_ERROR			7
#define DRV_SOCKET_ERROR		51

#define TCP_INPUT_QUEUE_SIZE	2048
#define TCP_OUTPUT_QUEUE_SIZE	1024
#define INPUT_BUFFER_SIZE		2048

#define	IO_CONNECT_ERR			0x101
#define	IO_NONBLOCKING			0x102
#define	IO_CREATE_SOCKET		0x103
#define	IO_SEND_ERROR			0x104
#define	IO_RCV_PENDING			0x105
#define	IO_CLIENT_ERR			0x110

#define	IO_SOCKET_ERROR			0x201
#define	IO_SOCKET_OPTION_ERROR	0x202

#define SOCKET_NOT_CREATED		200
#define SOCKET_CREATED			201
#define SOCKET_CLOSED			202
#define SOCKET_CLOSING			203
#define SOCKET_ACCEPTING		204

#define	MTU_SIZE				1460
#define MAX_LISTEN_QUEUE		5
#define MAX_WAIT_COUNT			5

typedef struct stConnData {
  SOCKET hSock;							// Connection socket
  SOCKADDR_IN stRemoteName;				// Remote host address & port
  DWORD dwStartTime;					// Time of connect
  BOOL bReadPending;					// Deferred read flag
  int  nBytesRcvd;						// Data currently buffered
  int  nBytesSent;						// Data sent from buffer
  DWORD dwByteCount;					// Total bytes received
  char szIOBuf  [INPUT_BUFFER_SIZE];	// Network I/O data buffer
} CONNECION_DATA;


#endif

⌨️ 快捷键说明

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