91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 21KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-09
  • 語言: C/C++
  • 標簽: C??C++??Linux??多線程??

資源簡介

基于linux下的c/c++程序,多線程,斷點續傳功能沒有實現, 可傳輸大于2G的文件。 設計思想:預先分配的N個緩沖區形成類似循環隊列。 【1】預先分配N個緩沖區,多線程方式對緩沖區進行讀寫互斥,有類似生產者消費者的思想。 【2】服務器兩個線程,一個線程負責讀文件進入緩沖區,另一個線程負責發送文件數據。 【3】客戶端兩個線程,一個線程負責接收文件進入緩沖區,另一個線程負責寫文件數據。 【4】服務器端,命令行./Server_NBuffer 要傳輸的文件名 【5】客戶端,命令行./Client_NBuffer 服務器地址

資源截圖

代碼片段和文件信息

#define?_GNU_SOURCE


#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?????//?for?sockaddr_in
#include?????//?for?socket
#include?????//?for?socket
#include?????????//?for?printf
#include?????????//?for?exit
#include?????????//?for?bzero
#include
#include??
#include?

#define?SERVER_PORT????6666
#define?LENGTH_OF_LISTEN_QUEUE??20
#define?FILE_NAME_MAX_SIZE?512
#define?SPLIT_FILE_NAME_SIZE?100

#define?BUFFMAX?1024
#define?BUFFNUM???5
#define?N?20

char?*pBuff[3]={NULL};
sem_t?mutex[3]fullavail;

struct?fileMSG
{
char?fileName[SPLIT_FILE_NAME_SIZE];
long?long?fileSize;
};

struct?BreakPointMsg
{
long?long?iStart;
long?long?iReadSize;

};

struct?FileThd
{
char?fileName[SPLIT_FILE_NAME_SIZE];
int?serverSocket;
long?long?recvSize;

int?fd;
long?long?istart;
};

int?InitOn();
int?ConnectServer(int?argcchar?**argv);
int?SendBreakpMSG2Server(int?serverSocket?struct?fileMSG?fm[]);
int?CreateRecvFile(char?fileName[]?long?long?fileSize);
void?RecvFileThread(void?*arg);
void?WriteFileThread(void?*arg);
int?ProcessMain(int?server_socketchar?filename[]);

int?main(int?argcchar?**argv)
{
char?file_name[SPLIT_FILE_NAME_SIZE]=““;
bzero(file_nameSPLIT_FILE_NAME_SIZE);

if?(!InitOn())
{
printf(“初始化出錯!“);
return?1;
}
int?sSocket?=?ConnectServer(argcargv);
if?(sSocket?==?-1)
{
printf(“\n不能連接服務器!“);
return?1;
}

struct?timeval?tpstarttpend;?//用于記錄時間?
float?timeuse;?//所用時間
gettimeofday(&tpstartNULL);?
printf(“\n開始計算時間...“);

????struct?fileMSG?fm[1];

????if?(SendBreakpMSG2Server(sSocket?fm)?==?0)
????{
???????printf(“\n發送斷點信息到服務器有誤!“);
????}
printf(“\n服務器發來的文件名為:%s要讀的文件大小為%lld“fm->fileNamefm->fileSize);?
????if?(CreateRecvFile(fm->fileNamefm->fileSize)?==?0)
????{
????????printf(“創建接收文件失敗!“);
????}
????if?(ProcessMain(?sSocket?fm->fileName)?==?0)
????{
????????printf(“\n處理函數出錯!“);
????}
int?i=0;
for?(i=0;?i {
if?(pBuff[i]!=NULL)
{
free(pBuff[i]);
}
}
gettimeofday(&tpendNULL);?
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+(tpend.tv_usec-tpstart.tv_usec);??
timeuse/=1000000;?
printf(“\n?run?finish!“);
printf(“\n整個程序共花時間:%f秒==%f分鐘\n“?timeusetimeuse/60);

close(sSocket);

????return?0;
}

int?InitOn()
{
int?i=0;
int?ret;
for?(i=0;?i {
ret=sem_init(&mutex[i]01);
if?(ret!=0)
{
perror(“sem_init“);
return?0;
}

}
ret=sem_init(&avail0BUFFNUM);?
if?(ret!=0)
{
perror(“sem_init“);
return?0;
}
ret=sem_init(&full00);
if?(ret!=0)
{
perror(“sem_init“);
return?0;
}
if?(ret!=0)
{
perror(“sem_init“);
}
for?(i=0;?i {
pBuff[i]?=?(char?*)malloc(sizeof(char)*

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????16704??2012-11-15?14:31??C?C++?Linux多線程文件程序\Client_NBuffer
?????文件???????12519??2012-11-15?14:30??C?C++?Linux多線程文件程序\Client_NBuffer.c
?????文件???????16437??2012-11-14?14:23??C?C++?Linux多線程文件程序\Server_NBuffer
?????文件???????11996??2012-11-14?14:14??C?C++?Linux多線程文件程序\Server_NBuffer.c
?????文件?????????472??2012-11-19?09:22??C?C++?Linux多線程文件程序\說明文檔.txt
?????目錄???????????0??2012-11-14?10:21??C?C++?Linux多線程文件程序\

評論

共有 條評論