⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesend1dlg.cpp

📁 用VC++实现的
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -