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

📄 clientsocket.h

📁 一个多线程的网络数据采集系统(客户端)
💻 H
字号:
#include <afxmt.h>

#pragma once

#define	WM_ONRECEIVE					WM_USER+24
#define	WM_ONSEND					WM_USER+25
#define WM_REC_MSG			WM_USER+20	
#define	WM_GET_CONNECTED				WM_USER+100
//用于Socket与主窗口通讯用的自定义事件
#define WM_CONN_BREAK		WM_USER+21	// 客户端的连接中断
#define WM_CLOSE_COM		WM_USER+22	// 关闭COM口
#define WM_ASK_COM_CONN		WM_USER+23	// 请求打开COM口

//socket 通讯报文协议
const unsigned int UNDEFINED		= 0;	//未定义的报文
const unsigned int ASKOPENCOM		= 1;	//请求打开COM口
const unsigned int ASKSEND			= 2;	//请求传送数据
const unsigned int ASKSTOP			= 3;	//请求停止传送数据
const unsigned int ASKCLOSECOM		= 4;	//请求关闭COM口
const unsigned int ASKMODIFYCOM		= 5;	//请求修改COM口设置
const unsigned int ASKSTOPCONN		= 6;	//请求断开连接,结束会话

const unsigned int ANSOPENCOM		= 21;	//回答已打开COM口
const unsigned int ANSPREPSEND		= 22;	//回答准备发送数据
const unsigned int ANSSTOP			= 23;	//回答已停止传送数据
const unsigned int ANSCLOSECOM		= 24;	//回答已关闭COM口
const unsigned int ANSMODIFYCOM		= 25;	//回答已修改COM口设置
const unsigned int ANSCOMNOOK		= 26;	//回答COM口未找到
const unsigned int ANSNOCANCLOSECOM = 27;	//回答无权关闭COM口
const unsigned int MESG				= 28;   //传送的是数据
const unsigned int MESGFORALL		= 29;   //传送的数据给所有连在该COM口的客户
const unsigned int ERRMESG			= 30;   //传送的不是数据
////socketclient 的状态
const unsigned int NO_COM			= 40;	//未连接COM口状态
const unsigned int CONN_COM			= 41;   //已连接COM口状态
const unsigned int SENDDATA			= 42;   //传送数据状态
const unsigned int PAUSE			= 43;   //暂停传送数据状态
const unsigned int CLOSE			= 44;   //关闭已连接COM口
const unsigned int CANCEL			= 44;   //取消该会话
const unsigned int BREAK			= 44;   //会话突然断开

//-----------------------------------------------

enum CommDataType { TYPE_CHAR, TYPE_INT, TYPE_LONG, TYPE_FLOAT, TYPE_DOUBLE };
struct ComData{
	union {
		char	d_char;
		int		d_int;
		long	d_long;
		float	d_float;
		double	d_double;
	} data;
	CommDataType datatype;
};

/////////////////////////////////////////////////////////////////////////////
// CPkg document

/**
* @类功能说明
*   CPkg类负责TCP/IP通信中数据的封装和提取
**/
class CPkg : public CObject
{
protected:
	DECLARE_DYNCREATE(CPkg)

// Attributes
public:
    UINT MsgFlag;
	CommDataType	datatype;
	union databuff {
		char			d_char;
		int				d_int;
		long			d_long;
		float			d_float;
		double			d_double;
	} data;
	UINT uComNo;
public:
   	CPkg();
	CPkg(CPkg&);
	virtual ~CPkg();
// Operations
public:
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CPkg)
	virtual void Serialize(CArchive& ar);   // overridden for document i/o
	protected:
	//}}AFX_VIRTUAL

// Implementation
public:
	void Init();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

	// Generated message map functions
protected:
	//{{AFX_MSG(CPkg)
		// NOTE - the ClassWizard will add and remove member functions here.
	//}}AFX_MSG
};

//CPkgQueue
class CPkgQueue : public CObList
{
public:
	void Add(CPkg *pMsg);
	CPkg *Remove();

private:
	CMutex m_mutex;
};

// CClientSocket 命令目标
class CClientThread;

class CClientSocket : public CSocket
{
// Attributes
public:
	/**
	* 拥有本套接字的线程指针
	**/
	CClientThread *m_pOwner;
	/**
     * 类CSocketFile的一个实例的指针,用于在客户端
     * 使用Sockets窗口通过网络接收和发送数据
	 **/
	CSocketFile* m_pSocketFile;
	/**
     * 类CArchive的一个实例的指针,用于在客户端
     * 使用Sockets窗口通过网络in数据流
	 **/
	CArchive*	m_pArchiveIn;
	/**
     * 类CArchive的一个实例的指针,用于在客户端
     * 使用Sockets窗口通过网络out数据流
	 */
	CArchive*	m_pArchiveOut;
	/**
	* IP地址
	**/
	CString     IpAddress;
	/**
	* 接受到新数据包标志
	**/
	bool m_bReceive;
	/**
	* 连接关闭标志
	**/
	bool m_bClose;
// Operations
public:
	/**
     * 建构函数
     *
	 */
	CClientSocket(CClientThread *pThread);
	/**
     * 析构函数,调用Finalize()
     *
	 */
	virtual ~CClientSocket();

// Overrides
public:
	/**
     * 结束函数用于m_pSocketFile、m_pArchiveIn、m_pArchiveOut内存空间释放
     *
	 */
	void Finalize();
	/**
     * 发送数据报到网络上机器,调用函数ASSERT(pkg)
     *
	 */
	void SendPkg(CPkg* pkg);
	/**
     * 接收网络上的数据报,调用函数ASSERT(pkg)
     *
	 */
	void ReceivePkg(CPkg* pkg);
	/**
     * 初始化函数用于m_pSocketFile、m_pArchiveIn、m_pArchiveOut分配内存空间
     *
	 */
	void Init();
	BOOL Open(const CString& sConnStr);
	bool IsClose() const { return m_bClose; }
	bool IsReceive() const { return m_bReceive; }
	void SetReceive(bool bReceive){ m_bReceive = bReceive;}
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CClientSocket)
	public:
	virtual void OnReceive(int nErrorCode);
	virtual void OnClose(int nErrorCode);
	//}}AFX_VIRTUAL

	// Generated message map functions
	//{{AFX_MSG(CClientSocket)
		// NOTE - the ClassWizard will add and remove member functions here.
	//}}AFX_MSG

// Implementation
protected:
};

⌨️ 快捷键说明

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