飞秋文件传输模拟实现代码
最近一直在研究基于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
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的飞秋文件传输模拟实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VTK修炼之道71:交互与Widget_
- 下一篇: VTK修炼之道73:交互部件_Widge