📄 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 + -