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