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

📄 socketcomm.h

📁 帮助VC的初学者了解向导生成程序的整体结构 Visual C++串口通信
💻 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 + -