📄 socketcomm.h
字号:
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// 客户端操作函数
#define TCP_RECV_BUF 2048
#define TCP_RECV_TIMEOUT 20
class AFX_EXT_CLASS CSocketClient
{
public:
char m_szRawIn[TCP_RECV_BUF];
int m_nPort;
char m_szIPAddress[20];
CBlockingSocket m_sClient;
CMyCriticalSec m_cSocket;
HANDLE m_hSocketRec;
BOOL m_bRecvRun; // 控制接收线程
CSockAddr m_ServerSockAddr;
HANDLE m_hSend;
public:
CSocketClient();
~CSocketClient();
BOOL Start(int nPort,const char *pszIPAddress,int nPriority=0);
void End();
//
virtual void OnSocketUp();
virtual void OnSocketDown();
virtual void OnRecvData(char *pBuffer,int nLen);
protected:
void WriteToSocket(const char *pbuffer, int nlen);
};
// 单连接server
class AFX_EXT_CLASS CSocketServer
{
public:
char m_szRawIn[TCP_RECV_BUF];
int m_nPort;
CBlockingSocket m_sClient;
CBlockingSocket m_sListen;
CMyCriticalSec m_cSocket;
HANDLE m_hSocketRec;
BOOL m_bRecvRun; // 控制接收线程
CSockAddr m_ServerSockAddr;
CSockAddr m_ClientAddr;
int m_nConnState;
protected:
HANDLE m_hSend;
public:
CSocketServer();
~CSocketServer();
// 以下函数子类可以重载,且不用调用基类的函数
virtual void OnSocketUp(CSockAddr *pClientAddr);
virtual void OnSocketDown();
virtual void OnRecvData(char *pBuffer,int nLen);
//
void StartSocketServer(int nPort,int nPriority=0);
void EndSocketServer();
BOOL WriteToSocket(const char *pbuffer, int nlen);
};
// 多连接服务器操作函数
#define MAX_COUNT 1024
typedef void PFCONN_UP(DWORD dwSocketID);
typedef void PFCONN_DOWN(DWORD dwSocketID);
typedef void PFRECV_DATA(DWORD dwSocketID,DWORD *pdwSocketState,BYTE *pBuffer,int nLen);
typedef struct{
PFCONN_UP* pfConnUp;
PFCONN_DOWN* pfConnDown;
PFRECV_DATA* pfRecvData;
CBlockingSocket tcpListen;
}MultiListen;
extern "C" __declspec(dllimport) BOOL CreateMultiListen(int nPort,MultiListen* pListen);
extern "C" __declspec(dllimport) void DestroyMultiListen(MultiListen* pListen);
extern "C" __declspec(dllimport) int SendToMultiData(DWORD dwSocketID,char *pBuffer,int nLen);
extern "C" __declspec(dllimport) void EndMultiServer(DWORD dwSocketID);
extern "C" __declspec(dllimport) void EndAllMultiServer();
// 获取socket连接信息
extern "C" __declspec(dllimport) BOOL GetSocketInfo(DWORD dwSocketID,SOCKETINFO *pInfo);
// 服务器超时设置,以秒为单位
extern "C" __declspec(dllimport) void LoadServerTimeOut();
extern "C" __declspec(dllimport) void SetServerTimeOut(DWORD dwTout);
///////////////////////////////////////////////////////////////////////////////////////////
// UDP操作
/*
UDP操作不分客户端和服务器端,收发双方首先生成socket
1。 发送时,只需要知道对方的IP地址和端口号即可;
2。 接收要在固定的端口上进行接收,所以应先将socket和相应的端口绑定
*/
#define UDP_RECV_BUF 2048
class AFX_EXT_CLASS CSocketUDP
{
public:
char m_szRawIn[UDP_RECV_BUF];
CBlockingSocket m_sSocket;
CMyCriticalSec m_cSocket;
HANDLE m_hSocketRec;
BOOL m_bRecvRun; // 控制接收线程
BOOL m_bIsBroadcast;
CSockAddr m_RecvSockAddr;
HANDLE m_hSend;
public:
CSocketUDP();
~CSocketUDP();
BOOL InitOnlyForSend();
BOOL CreateSocketUDP(int nRecvPort,BOOL bIsBroadcast,int nPriority=0);
void DestroySocketUDP();
BOOL WriteToSocket(const char *pszRemoteIP,int nRemotePort,const char *pbuffer, int nlen);
BOOL WriteToSocket(DWORD dwRemoteIP,int nRemotePort,const char *pbuffer, int nlen);
virtual void OnRecvData(CSockAddr *pRemoteSockAddr,char *pBuffer,int nLen);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -