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

📄 transfersocket_hawk.h

📁 电脑编程技巧和源码。很不错的。
💻 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 + -