📄 transfersocket_hawk.h
字号:
#if !defined(AFX_TRANSFERSOCKET_HAWK_H__04ED243F_C287_11D3_9B2A_444553540000__INCLUDED_)
#define AFX_TRANSFERSOCKET_HAWK_H__04ED243F_C287_11D3_9B2A_444553540000__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// TransferSocket_hawk.h : header file
//
#include "afxsock.h"
#include "afxtempl.h"
//数据块的"开始"标记
#define BEGIN_TAG "begin"
//"开始"标记的长度
#define BEGIN_TAG_LENGTH 5
/////////////////////////////////////////////////////////////////////////////
// CTransferSocket_hawk command target
class CTransferSocket_hawk : public CAsyncSocket
{
protected:
//以下成员变量用于数据发送
//
//数据缓存区,为一个先入先出队列,
//注意:队列中的数据比原始数据多4+BEGIN_TAG_LENGTH个字节,其中
// 前4个字节用来存放原始数据的长度,接下来存放BEGIN_TAG.
// 远程端需要长度来确定将要接收的数据块尺寸,并利用BEGIN_TAG
// 来判断是否有错误发生.
CArray <BYTE *,BYTE *> m_DataQueue;
//数据缓存区中各个数据块的尺寸(含存放原始数据长度的4个字节和
//存放"开始"标记的BEGIN_TAG_LENGTH个字节)
CArray <long,long> m_DataSizes;
//指向当前正在传送的数据块中,下一个Send发送数据的起始位置
long m_nSendOffset;
//以下成员变量用于数据接收
//
//标志是否已经获得将要接收的数据的尺寸
BOOL m_bGetRecvSize;
//指向当前正在接收的数据块尺寸中,下一个Receive接收数据的位置
long m_nRecvSizeOffset;
//将要接收的数据块尺寸
long m_nRecvSize;
//标志是否已经获得"起始"标记
BOOL m_bGetRecvBeginTag;
//指向当前正在接收的"起始"标记中,下一个Receive接收数据的位置
long m_nRecvBeginTagOffset;
//存放接收到的"起始"标记
char m_szRecvBeginTag[BEGIN_TAG_LENGTH];
//接收数据缓存区
BYTE *m_pRecvBuf;
//指向当前正在接收的数据块中,下一个Receive接收数据的位置
long m_nRecvOffset;
public:
BOOL Create(UINT nSocketPort=0,LPCTSTR lpszSocketAddress=NULL);
BOOL TransferData(const void *pData,long size);
int GetQueueCount();
virtual void Close();
protected:
//清除发送数据队列,把各种成员变量恢复初始状态。不要试图用该函数
//中止数据发送,否则会导致两个问题:1 虽然中止了发送,但有关接收
//数据的成员变量也被初始化,导致数据接收错误;2 远端机并不知道数
//据发送被异常中止,如果以后再发数据,会被远端机当作上一次的数据
//加以接收。
void Clear();
protected:
//定义了虚函数OnTransferClose用到的一些枚举常量。
enum {NORMAL,SENDERR,RECVERR,RECVBEGINTAGERR};
virtual void OnTransferClose(int reason,int nErrorCode=0);
virtual void OnOneDataSent();
virtual void OnOneDataReceived(void *pData,long size);
// Attributes
public:
// Operations
public:
CTransferSocket_hawk();
virtual ~CTransferSocket_hawk();
// Overrides
public:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTransferSocket_hawk)
public:
virtual void OnSend(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
//}}AFX_VIRTUAL
// Generated message map functions
//{{AFX_MSG(CTransferSocket_hawk)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
// Implementation
protected:
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_TRANSFERSOCKET_HAWK_H__04ED243F_C287_11D3_9B2A_444553540000__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -