日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 飞秋文件传输模拟实现代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近一直在研究基于WINSOCK的文件傳輸,文件傳輸時會出現(xiàn)各種各樣的情況處理起來其實也挺麻煩的這里不一一說明,大家看代碼吧,這是最新版 飛秋 http://www.freeeim.com/ 的代碼,這個是飛秋文件傳輸模擬實現(xiàn)代碼,完整代碼可以網(wǎng)上搜索獲取。

#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;

// 飛秋文件發(fā)送接收緩沖大小
#define FILE_BUFFER_LENGTH 512

?

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

// 飛秋文件收發(fā)流程
// 1. 用戶發(fā)送一個文件,程序把文件信息發(fā)給接收人,等待接收人確認(rèn)接收。
// 2. 用戶收到一個文件,確認(rèn)接收,AddRecvFile 建立接收線程,獲取偵聽的端口并返回。
// 3. 發(fā)送方收到接收方的確認(rèn)接收后,根據(jù)對方提供的端口建立文件發(fā)送鏈接。

// 飛秋(FEIQ)整個程序的文件收發(fā)管理模塊
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; // 當(dāng)前線程數(shù)

?SOCKET m_sockListen; // 偵聽線程
?CCriticalSection m_csThread; // 線程同步器
?CCriticalSection m_csFiles; // 文件列表同步器

?XEIM_SendFileLogic();
?~XEIM_SendFileLogic();

?void CloseListenThread();

?// 開始接收文件,啟動偵聽線程
?UINT StartRecvFile();

?// 開始發(fā)送文件
?UINT StartSendFile(UINT nDestIndex, UINT nMapIndex);


?UINT GetFileSize(LPCTSTR lpszFileName);

?// 當(dāng)前幾個文件正在處理,不包括列表里其他未處理文件
?UINT GetThreadCount();

?// 獲取文件列表長度
?UINT GetFileCount();


?// 獲取發(fā)送文件信息
?XEIM_SendFiles *GetSendFileInfo(UINT nMapIndex);

?// 通過 map Index 獲取文件信息
?XEIM_SendFiles *GetFileInfoByMapIndex(UINT nMapIndex);

?// 確認(rèn)接收文件時用的,獲取接收文件信息的MPA ID
?UINT GetRecvFileInfoMapIndex(UINT nDestIndex, LPCTSTR lpszUID);

?// 添加一個發(fā)送文件
?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); // 文件發(fā)送
};

#endif // _XEIM_SEND_FILE_LOGIC

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的飞秋文件传输模拟实现代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。