📄 filesend1dlg.cpp
字号:
// Filesend1Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "Filesend1.h"
#include "Filesend1Dlg.h"
#include "BrowseDir.h"
#include "stdlib.h"
#include "stdio.h"
#include "direct.h"
#include "string.h"
#include "io.h"
#define L 1350
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//CFilesend1Dlg dlg;
CSocket *m_pSendSocket1=NULL;
CSocket *m_pSendSocket2=NULL;
CSocket *m_pSendSocket3=NULL;
CSocket *m_pSendSocket4=NULL;
CSocket *m_pSendSocket5=NULL;
CString filename1[6000];
CString filename2[6000];
CString filename3[6000];
CString filename4[6000];
CString filename5[6000];
FILE *m_pSourceFile1[6000];
FILE *m_pSourceFile2[6000];
FILE *m_pSourceFile3[6000];
FILE *m_pSourceFile4[6000];
FILE *m_pSourceFile5[6000];
CString filename_temp1[6000];
CString filename_temp2[6000];
CString filename_temp3[6000];
CString filename_temp4[6000];
CString filename_temp5[6000];
long m_PacketTotalNum1=0;
long m_PacketTotalNum2=0;
long m_PacketTotalNum3=0;
long m_PacketTotalNum4=0;
long m_PacketTotalNum5=0;
long m_PacketSerialNum1=0;
long m_PacketSerialNum2=0;
long m_PacketSerialNum3=0;
long m_PacketSerialNum4=0;
long m_PacketSerialNum5=0;
CString MidString1="";//存放文件名
CString MidString2="";
CString MidString3="";
CString MidString4="";
CString MidString5="";
char buffer1[L+50]={""}; //定义发送缓冲区大小
char buffer2[L+50]={""};
char buffer3[L+50]={""};
char buffer4[L+50]={""};
char buffer5[L+50]={""};
CString cfilename1;
CString cfilename2;
CString cfilename3;
CString cfilename4;
CString cfilename5;
long numFileList1;
long numFileList2;
long numFileList3;
long numFileList4;
long numFileList5;
CString WaitString1="";
CString WaitString2="";
CString WaitString3="";
CString WaitString4="";
CString WaitString5="";
//定义发送文件数据包数据区的大小
BOOL bStop1=false;
BOOL bStop2=false;
BOOL bStop3=false;
BOOL bStop4=false;
BOOL bStop5=false;
//long j=0,k,w,h;
//定义文件指针,用于指向要发送的文件
char Output[1000]; //定义显示缓冲区
//int number=0;
long filenumber=0,filenumber1=0;
long number1;
long number2;
long number3;
long number4;
long number5;
long uclnew=0;
/////////////////////////////////////////////////////////////////////////////
long filecont;
long filefile;
CString cont1;
CString cont2;
CString file1;
CString file2;
////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CStatDir:public CBrowseDir //定义一个基类
{
protected:
int m_nFileCount; //保存文件个数
int m_nSubdirCount; //保存子目录个数
public:
//缺省构造器
CStatDir()
{
m_nFileCount=m_nSubdirCount=0; //初始化数据成员m_nFileCount和m_nSubdirCount
}
int GetFileCount() //返回文件个数
{
return m_nFileCount;
}
int GetSubdirCount() //返回子目录个数
{
return m_nSubdirCount-1; //因为进入初始目录时,也会调用函数ProcessDir,
//所以减1后才是真正的子目录个数。
}
protected:
//覆写虚函数ProcessFile,每调用一次,文件个数加1
virtual bool ProcessFile(const char *filename)
{
m_nFileCount++;
return CBrowseDir::ProcessFile(filename);
}
//覆写虚函数ProcessDir,每调用一次,子目录个数加1
virtual void ProcessDir(const char *currentdir,const char *parentdir)
{
m_nSubdirCount++;
CBrowseDir::ProcessDir(currentdir,parentdir);
}
};
UINT SourceFile1(LPVOID param)
{
long w,j,k;
//::PostMessage((HWND)param,WM_GETPORT,0,0);
m_pSendSocket1=new CSocket();//发送套接字指向一个新的套接字
if(!m_pSendSocket1->Create(7001+1000,SOCK_DGRAM))
{
::PostMessage((HWND)param,WM_SOCKET1WRONG,0,0);//如果创建套接字失败,
//则调用::OnSocketWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
while(true)
{
for(w=1;w<=numFileList1;w++)
{
//w=1;
m_PacketSerialNum1=0;
j=0;
MidString1=filename1[w];
if((m_pSourceFile1[w]=fopen(MidString1,"rb"))==NULL)
{
::PostMessage((HWND)param,WM_SOURCE1WRONG,0,0);//如果打不开此文件,
//则调用::OnSourceWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(MidString1,&FindFileData));//根据文件的路径名MidString查找源文件的信息,
//并把结果放到FindFileData中
k=FindFileData.nFileSizeLow;
m_PacketTotalNum1=k/L+1;
memcpy(buffer1+L+4,&m_PacketTotalNum1,4);
long i,l;
filename_temp1[w]=FindFileData.cFileName;
//while(true)//一直执行
for(l=0;l<m_PacketTotalNum1;l++)
{
::PostMessage((HWND)param,WM_SENDSERIAL1,0,0);
for(i=0;i<L && !feof(m_pSourceFile1[w]);i++)
buffer1[i]=fgetc(m_pSourceFile1[w]); //把L个字符读入缓冲区
memcpy(buffer1+L,&i,4);
memcpy(buffer1+L+8,&m_PacketSerialNum1,4);//将“当前传送包(m_PacketSerialNum)”的值写到
//缓冲区中L+8开始的存储单元,占用空间与上面的m_PacketTotalNum一样,
//为4个字节
// if(w==0)
// y=0;
// else
// y=1;
// else
// y=0x0000000C;
int fileid;
fileid=w-1;
memcpy(buffer1+L+13,&fileid,4);
//AfxMessageBox(buffer+L+12);
//memcpy(buffer+L+12,&w,4);
// sprintf(buffer+L+16,"%s",filename_temp[w]);
memcpy(buffer1+L+12,&uclnew,1);
memcpy(buffer1+L+19,filename_temp1[w],31);
// AfxMessageBox(buffer+L+19);
m_PacketSerialNum1++;//发送完一个数据包,“当前传送包(m_PacketSerialNum)”的值加1
if(feof(m_pSourceFile1[w]))//如果检测到文件已经结束(已经发送完)
{
i--;//i(实际收到的字节数)自减,
//因为前面的“for(i=0;i<L && !feof(m_pSourceFile);i++)”
//在不知道文件是否已经结束的情况下,已经多加了一次
memcpy(buffer1+L,&i,4);//将i的值写到缓冲区中L开始的存储单元中,占用空间为4个字节
rewind(m_pSourceFile1[w]);//文件指针回到开头
m_PacketSerialNum1=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
j++;//整个文件已经发送完,“已发送次数”的值加1
}
//--------------------------------------------------------------------------
m_pSendSocket1->SendTo(buffer1,L+50,7001,"222.196.33.79",0);
//上句的作用是: 使用VC++6.0中已经集成的CSocket类调用,
//用SendTo()函数向指定目的地发送数据
//这里我作一个比较详细的解释:
//第一个参数buffer :包含待发送数据的缓冲区
//第二个参数L+50 :缓冲区的长度
//第三个参数m_SendTo_Port
//第四个参数m_SendTo_Ip :指向目的套接字的地址(IP加端口号)
//第五个参数0 :套接字类型(数据包式SOCK_DGRAM)
::Sleep(100);
//-----------------------------------------------------------------------------
if(bStop1)//如果进程停止
{
if(m_pSendSocket1)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket1;//删除发送套接字m_pSendSocket
m_pSendSocket1=NULL;//复原
if(m_pSourceFile1[w])//如果源文件还处于打开状态
fclose(m_pSourceFile1[w]);//关闭源文件
return 0;//函数返回0值
}
}//“while(true){………;}”的范围到此结束
//::Sleep(1000);
}
}
}
UINT SourceFile2(LPVOID param)
{
long w,j,k;
//::PostMessage((HWND)param,WM_GETPORT,0,0);
m_pSendSocket2=new CSocket();//发送套接字指向一个新的套接字
if(!m_pSendSocket2->Create(7002+1000,SOCK_DGRAM))
{
::PostMessage((HWND)param,WM_SOCKET2WRONG,0,0);//如果创建套接字失败,
//则调用::OnSocketWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
while(true)
{
for(w=1;w<=numFileList2;w++)
{
//w=1;
m_PacketSerialNum2=0;
j=0;
MidString2=filename2[w];
if((m_pSourceFile2[w]=fopen(MidString2,"rb"))==NULL)
{
::PostMessage((HWND)param,WM_SOURCE2WRONG,0,0);//如果打不开此文件,
//则调用::OnSourceWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(MidString2,&FindFileData));//根据文件的路径名MidString查找源文件的信息,
//并把结果放到FindFileData中
k=FindFileData.nFileSizeLow;
m_PacketTotalNum2=k/L+1;
memcpy(buffer2+L+4,&m_PacketTotalNum2,4);
long i,l;
filename_temp2[w]=FindFileData.cFileName;
//while(true)//一直执行
for(l=0;l<m_PacketTotalNum2;l++)
{
::PostMessage((HWND)param,WM_SENDSERIAL2,0,0);
for(i=0;i<L && !feof(m_pSourceFile2[w]);i++)
buffer2[i]=fgetc(m_pSourceFile2[w]);
memcpy(buffer2+L,&i,4);
memcpy(buffer2+L+8,&m_PacketSerialNum2,4);//将“当前传送包(m_PacketSerialNum)”的值写到
//缓冲区中L+8开始的存储单元,占用空间与上面的m_PacketTotalNum一样,
//为4个字节
// if(w==0)
// y=0;
// else
// y=1;
// else
// y=0x0000000C;
int fileid;
fileid=w-1;
memcpy(buffer2+L+13,&fileid,4);
//AfxMessageBox(buffer+L+12);
//memcpy(buffer+L+12,&w,4);
// sprintf(buffer+L+16,"%s",filename_temp[w]);
memcpy(buffer2+L+19,filename_temp2[w],31);
// AfxMessageBox(buffer+L+19);
m_PacketSerialNum2++;//发送完一个数据包,“当前传送包(m_PacketSerialNum)”的值加1
if(feof(m_pSourceFile2[w]))//如果检测到文件已经结束(已经发送完)
{
i--;//i(实际收到的字节数)自减,
//因为前面的“for(i=0;i<L && !feof(m_pSourceFile);i++)”
//在不知道文件是否已经结束的情况下,已经多加了一次
memcpy(buffer2+L,&i,4);//将i的值写到缓冲区中L开始的存储单元中,占用空间为4个字节
rewind(m_pSourceFile2[w]);//文件指针回到开头
m_PacketSerialNum2=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
j++;//整个文件已经发送完,“已发送次数”的值加1
}
//--------------------------------------------------------------------------
m_pSendSocket2->SendTo(buffer2,L+50,7002,"222.196.33.79",0);
//上句的作用是: 使用VC++6.0中已经集成的CSocket类调用,
//用SendTo()函数向指定目的地发送数据
//这里我作一个比较详细的解释:
//第一个参数buffer :包含待发送数据的缓冲区
//第二个参数L+50 :缓冲区的长度
//第三个参数m_SendTo_Port
//第四个参数m_SendTo_Ip :指向目的套接字的地址(IP加端口号)
//第五个参数0 :套接字类型(数据包式SOCK_DGRAM)
::Sleep(100);
//-----------------------------------------------------------------------------
if(bStop2)//如果进程停止
{
if(m_pSendSocket2)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket2;//删除发送套接字m_pSendSocket
m_pSendSocket2=NULL;//复原
if(m_pSourceFile2[w])//如果源文件还处于打开状态
fclose(m_pSourceFile2[w]);//关闭源文件
return 0;//函数返回0值
}
}//“while(true){………;}”的范围到此结束
// ::Sleep(10000);
}
}
}
UINT SourceFile3(LPVOID param)
{
long w,j,k;
//::PostMessage((HWND)param,WM_GETPORT,0,0);
m_pSendSocket3=new CSocket();//发送套接字指向一个新的套接字
if(!m_pSendSocket3->Create(7003+1000,SOCK_DGRAM))
{
::PostMessage((HWND)param,WM_SOCKET3WRONG,0,0);//如果创建套接字失败,
//则调用::OnSocketWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
while(true)
{
for(w=1;w<=numFileList3;w++)
{
//w=1;
m_PacketSerialNum3=0;
j=0;
MidString3=filename3[w];
if((m_pSourceFile3[w]=fopen(MidString3,"rb"))==NULL)
{
::PostMessage((HWND)param,WM_SOURCE3WRONG,0,0);//如果打不开此文件,
//则调用::OnSourceWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(MidString3,&FindFileData));//根据文件的路径名MidString查找源文件的信息,
//并把结果放到FindFileData中
k=FindFileData.nFileSizeLow;
m_PacketTotalNum3=k/L+1;
memcpy(buffer3+L+4,&m_PacketTotalNum3,4);
long i,l;
filename_temp3[w]=FindFileData.cFileName;
//while(true)//一直执行
for(l=0;l<m_PacketTotalNum3;l++)
{
::PostMessage((HWND)param,WM_SENDSERIAL3,0,0);
for(i=0;i<L && !feof(m_pSourceFile3[w]);i++)
buffer1[i]=fgetc(m_pSourceFile3[w]);
memcpy(buffer3+L,&i,4);
memcpy(buffer3+L+8,&m_PacketSerialNum3,4);//将“当前传送包(m_PacketSerialNum)”的值写到
//缓冲区中L+8开始的存储单元,占用空间与上面的m_PacketTotalNum一样,
//为4个字节
// if(w==0)
// y=0;
// else
// y=1;
// else
// y=0x0000000C;
int fileid;
fileid=w-1;
memcpy(buffer3+L+13,&fileid,4);
//AfxMessageBox(buffer+L+12);
//memcpy(buffer+L+12,&w,4);
// sprintf(buffer+L+16,"%s",filename_temp[w]);
memcpy(buffer3+L+19,filename_temp3[w],31);
// AfxMessageBox(buffer+L+19);
m_PacketSerialNum3++;//发送完一个数据包,“当前传送包(m_PacketSerialNum)”的值加1
if(feof(m_pSourceFile3[w]))//如果检测到文件已经结束(已经发送完)
{
i--;//i(实际收到的字节数)自减,
//因为前面的“for(i=0;i<L && !feof(m_pSourceFile);i++)”
//在不知道文件是否已经结束的情况下,已经多加了一次
memcpy(buffer3+L,&i,4);//将i的值写到缓冲区中L开始的存储单元中,占用空间为4个字节
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -