飞秋文件传输模拟实现代码

最近一直在研究基于WINSOCK的文件传输,文件传输时会出现各种各样的情况处理起来其实也挺麻烦的这里不一一说明,大家看代码吧,这是最新版 飞秋 http://www.freeeim.com/ 的代码,这个是飞秋文件传输模拟实现代码,完整代码可以网上搜索获取。

#ifndef _XEIM_SEND_FILE_LOGIC
#define _XEIM_SEND_FILE_LOGIC

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "afxmt.h" // CCritical section..
#include <winsock2.h>

#include "XEIM_SendFiles.h"
#include <map>

using namespace std;

// 飞秋文件发送接收缓冲大小
#define FILE_BUFFER_LENGTH 512

 

typedef struct _recvProcData{
 SOCKET sock;
 LPVOID logic;
} recvProcData;

// 飞秋文件收发流程
// 1. 用户发送一个文件,程序把文件信息发给接收人,等待接收人确认接收。
// 2. 用户收到一个文件,确认接收,AddRecvFile 建立接收线程,获取侦听的端口并返回。
// 3. 发送方收到接收方的确认接收后,根据对方提供的端口建立文件发送链接。

// 飞秋(FEIQ)整个程序的文件收发管理模块
class XEIM_SendFileLogic
{

private:
 map<UINT, XEIM_SendFiles *> m_mapFiles; // 文件列表
 UINT m_nFileCount; // 文件列表UID,用于 m_mapFiles;

 inline void DeleteData(UINT nIndex);
 XEIM_SendFiles * m_pFileInfo;
public:
 // 删除列表里的一个文件
 BOOL RemoveFileInfo(UINT nMapIndex);

 BOOL m_bListen;
 UINT m_nThreads; // 当前线程数

 SOCKET m_sockListen; // 侦听线程
 CCriticalSection m_csThread; // 线程同步器
 CCriticalSection m_csFiles; // 文件列表同步器

 XEIM_SendFileLogic();
 ~XEIM_SendFileLogic();

 void CloseListenThread();

 // 开始接收文件,启动侦听线程
 UINT StartRecvFile();

 // 开始发送文件
 UINT StartSendFile(UINT nDestIndex, UINT nMapIndex);


 UINT GetFileSize(LPCTSTR lpszFileName);

 // 当前几个文件正在处理,不包括列表里其他未处理文件
 UINT GetThreadCount();

 // 获取文件列表长度
 UINT GetFileCount();


 // 获取发送文件信息
 XEIM_SendFiles *GetSendFileInfo(UINT nMapIndex);

 // 通过 map Index 获取文件信息
 XEIM_SendFiles *GetFileInfoByMapIndex(UINT nMapIndex);

 // 确认接收文件时用的,获取接收文件信息的MPA ID
 UINT GetRecvFileInfoMapIndex(UINT nDestIndex, LPCTSTR lpszUID);

 // 添加一个发送文件
 UINT AddSendFile(UINT nFileSize, // 文件大小
  LPCTSTR szFilePathName, // 文件路径
  LPCTSTR szFileName, // 文件名
  LPCTSTR szUID // 对方的 UID
  );

 // 添加一个接收文件
 UINT AddRecvFile(UINT nFileSize, // 文件大小
  UINT nDestIndex, // FILE DEST UID
  LPCTSTR szFileName, // 文件名
  LPCTSTR szUID // 对方的 UID
  );

 // 飞秋侦听线程
 static DWORD CALLBACK ListenThreadProc(LPVOID lParam);

 static DWORD CALLBACK SendThreadProc(LPVOID lParam); // 文件接收

 static DWORD CALLBACK RecvThreadProc(LPVOID lParam); // 文件发送
};

#endif // _XEIM_SEND_FILE_LOGIC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值