📄 filesend1dlg.cpp
字号:
rewind(m_pSourceFile3[w]);//文件指针回到开头
m_PacketSerialNum3=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
j++;//整个文件已经发送完,“已发送次数”的值加1
}
//--------------------------------------------------------------------------
m_pSendSocket3->SendTo(buffer3,L+50,7003,"222.196.33.77",0);
//上句的作用是: 使用VC++6.0中已经集成的CSocket类调用,
//用SendTo()函数向指定目的地发送数据
//这里我作一个比较详细的解释:
//第一个参数buffer :包含待发送数据的缓冲区
//第二个参数L+50 :缓冲区的长度
//第三个参数m_SendTo_Port
//第四个参数m_SendTo_Ip :指向目的套接字的地址(IP加端口号)
//第五个参数0 :套接字类型(数据包式SOCK_DGRAM)
::Sleep(100);
//-----------------------------------------------------------------------------
if(bStop3)//如果进程停止
{
if(m_pSendSocket3)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket3;//删除发送套接字m_pSendSocket
m_pSendSocket3=NULL;//复原
if(m_pSourceFile3[w])//如果源文件还处于打开状态
fclose(m_pSourceFile3[w]);//关闭源文件
return 0;//函数返回0值
}
}//“while(true){………;}”的范围到此结束
// ::Sleep(10000);
}
}
}
UINT SourceFile4(LPVOID param)
{
long w,j,k;
//::PostMessage((HWND)param,WM_GETPORT,0,0);
m_pSendSocket4=new CSocket();//发送套接字指向一个新的套接字
if(!m_pSendSocket4->Create(7004+1000,SOCK_DGRAM))
{
::PostMessage((HWND)param,WM_SOCKET4WRONG,0,0);//如果创建套接字失败,
//则调用::OnSocketWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
while(true)
{
for(w=1;w<=numFileList4;w++)
{
//w=1;
m_PacketSerialNum4=0;
j=0;
MidString4=filename4[w];
if((m_pSourceFile4[w]=fopen(MidString4,"rb"))==NULL)
{
::PostMessage((HWND)param,WM_SOURCE4WRONG,0,0);//如果打不开此文件,
//则调用::OnSourceWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(MidString4,&FindFileData));//根据文件的路径名MidString查找源文件的信息,
//并把结果放到FindFileData中
k=FindFileData.nFileSizeLow;
m_PacketTotalNum4=k/L+1;
memcpy(buffer4+L+4,&m_PacketTotalNum4,4);
long i,l;
filename_temp4[w]=FindFileData.cFileName;
//while(true)//一直执行
for(l=0;l<m_PacketTotalNum4;l++)
{
::PostMessage((HWND)param,WM_SENDSERIAL4,0,0);
for(i=0;i<L && !feof(m_pSourceFile4[w]);i++)
buffer4[i]=fgetc(m_pSourceFile4[w]);
memcpy(buffer4+L,&i,4);
memcpy(buffer4+L+8,&m_PacketSerialNum4,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(buffer4+L+13,&fileid,4);
//AfxMessageBox(buffer+L+12);
//memcpy(buffer+L+12,&w,4);
// sprintf(buffer+L+16,"%s",filename_temp[w]);
memcpy(buffer4+L+19,filename_temp4[w],31);
// AfxMessageBox(buffer+L+19);
m_PacketSerialNum4++;//发送完一个数据包,“当前传送包(m_PacketSerialNum)”的值加1
if(feof(m_pSourceFile4[w]))//如果检测到文件已经结束(已经发送完)
{
i--;//i(实际收到的字节数)自减,
//因为前面的“for(i=0;i<L && !feof(m_pSourceFile);i++)”
//在不知道文件是否已经结束的情况下,已经多加了一次
memcpy(buffer4+L,&i,4);//将i的值写到缓冲区中L开始的存储单元中,占用空间为4个字节
rewind(m_pSourceFile4[w]);//文件指针回到开头
m_PacketSerialNum4=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
j++;//整个文件已经发送完,“已发送次数”的值加1
}
//--------------------------------------------------------------------------
m_pSendSocket4->SendTo(buffer4,L+50,7004,"222.196.33.73",0);
//上句的作用是: 使用VC++6.0中已经集成的CSocket类调用,
//用SendTo()函数向指定目的地发送数据
//这里我作一个比较详细的解释:
//第一个参数buffer :包含待发送数据的缓冲区
//第二个参数L+50 :缓冲区的长度
//第三个参数m_SendTo_Port
//第四个参数m_SendTo_Ip :指向目的套接字的地址(IP加端口号)
//第五个参数0 :套接字类型(数据包式SOCK_DGRAM)
::Sleep(100);
//-----------------------------------------------------------------------------
if(bStop4)//如果进程停止
{
if(m_pSendSocket4)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket4;//删除发送套接字m_pSendSocket
m_pSendSocket4=NULL;//复原
if(m_pSourceFile4[w])//如果源文件还处于打开状态
fclose(m_pSourceFile4[w]);//关闭源文件
return 0;//函数返回0值
}
}//“while(true){………;}”的范围到此结束
// ::Sleep(10000);
}
}
}
UINT SourceFile5(LPVOID param)
{
long w,j,k;
//::PostMessage((HWND)param,WM_GETPORT,0,0);
m_pSendSocket5=new CSocket();//发送套接字指向一个新的套接字
if(!m_pSendSocket5->Create(7005+1000,SOCK_DGRAM))
{
::PostMessage((HWND)param,WM_SOCKET5WRONG,0,0);//如果创建套接字失败,
//则调用::OnSocketWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
CString str1,str2;
int strlen,strlen1;
while(true)
{
for(w=1;w<=numFileList5;w++)
{
//w=1;
m_PacketSerialNum5=0;
j=0;
MidString5=filename5[w];
str1=MidString5;
// AfxMessageBox(str1);
strlen1=str1.ReverseFind('\\');
strlen=str1.GetLength( );
str1.Delete(strlen1+1,strlen-strlen1-1);
//AfxMessageBox(str1);
if(str1==cont1)
{
filecont=1;
// AfxMessageBox(str1);
}
else if(str1==cont2)
{
filecont=2;
// AfxMessageBox(str1);
}
else if(str1==file1)
{
filecont=6;
//AfxMessageBox(str1);
}
else if(str1==file2)
{
filecont=7;
// AfxMessageBox(str1);
}
else
{
filecont=0;
//AfxMessageBox(m_Fileaddr5);
}
if((m_pSourceFile5[w]=fopen(MidString5,"rb"))==NULL)
{
::PostMessage((HWND)param,WM_SOURCE5WRONG,0,0);//如果打不开此文件,
//则调用::OnSourceWrong(WPARAM wParam,LPARAM lParam)程序,返回出错信息
return 0;//返回
}
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(MidString5,&FindFileData));//根据文件的路径名MidString查找源文件的信息,
//并把结果放到FindFileData中
k=FindFileData.nFileSizeLow;
m_PacketTotalNum5=k/L+1;
memcpy(buffer5+L+4,&m_PacketTotalNum5,4);
long i,l;
filename_temp5[w]=FindFileData.cFileName;
//while(true)//一直执行
for(l=0;l<m_PacketTotalNum5;l++)
{
::PostMessage((HWND)param,WM_SENDSERIAL5,0,0);
for(i=0;i<L && !feof(m_pSourceFile5[w]);i++)
buffer5[i]=fgetc(m_pSourceFile5[w]);
memcpy(buffer5+L,&i,4);
memcpy(buffer5+L+8,&m_PacketSerialNum5,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(buffer5+L+13,&fileid,4);
//AfxMessageBox(buffer+L+12);
//memcpy(buffer+L+12,&w,4);
// sprintf(buffer+L+16,"%s",filename_temp[w]);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//long x=11;
memcpy(buffer5+L+17,&numFileList5,4);
memcpy(buffer5+L+12,&filecont,1);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//memcpy(buffer5+L+17,&x,4);
memcpy(buffer5+L+19,filename_temp5[w],31);
// AfxMessageBox(buffer+L+19);
m_PacketSerialNum5++;//发送完一个数据包,“当前传送包(m_PacketSerialNum)”的值加1
if(feof(m_pSourceFile5[w]))//如果检测到文件已经结束(已经发送完)
{
i--;//i(实际收到的字节数)自减,
//因为前面的“for(i=0;i<L && !feof(m_pSourceFile);i++)”
//在不知道文件是否已经结束的情况下,已经多加了一次
memcpy(buffer5+L,&i,4);//将i的值写到缓冲区中L开始的存储单元中,占用空间为4个字节
rewind(m_pSourceFile5[w]);//文件指针回到开头
m_PacketSerialNum5=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
j++;//整个文件已经发送完,“已发送次数”的值加1
}
//--------------------------------------------------------------------------
m_pSendSocket5->SendTo(buffer5,L+50,7005,"222.196.33.74",0);
//上句的作用是: 使用VC++6.0中已经集成的CSocket类调用,
//用SendTo()函数向指定目的地发送数据
//这里我作一个比较详细的解释:
//第一个参数buffer :包含待发送数据的缓冲区
//第二个参数L+50 :缓冲区的长度
//第三个参数m_SendTo_Port
//第四个参数m_SendTo_Ip :指向目的套接字的地址(IP加端口号)
//第五个参数0 :套接字类型(数据包式SOCK_DGRAM)
::Sleep(100);
//-----------------------------------------------------------------------------
if(bStop5)//如果进程停止
{
if(m_pSendSocket5)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket5;//删除发送套接字m_pSendSocket
m_pSendSocket5=NULL;//复原
if(m_pSourceFile5[w])//如果源文件还处于打开状态
fclose(m_pSourceFile5[w]);//关闭源文件
return 0;//函数返回0值
}
}//“while(true){………;}”的范围到此结束
//::Sleep(10000);
}
}
}
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilesend1Dlg dialog
CFilesend1Dlg::CFilesend1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CFilesend1Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFilesend1Dlg)
m_Fileaddr1 = _T("地址栏");
m_Fileaddr2 = _T("地址栏");
m_Fileaddr3 = _T("地址栏");
m_Fileaddr4 = _T("地址栏");
m_Fileaddr5 = _T("地址栏");
m_Output = _T("您好!感谢您使用本程序,敬请提出改善意见!\r\nRead me:\r\n\t[1]首先通过浏览按钮选择每一路待发送的数据源文件夹;\r\n\t[2]通过点击菜单栏中右边的“发送”菜单即可发送每一路的信息;\r\n\t[3]在此之前要通过点击菜单栏的标引-〉自动标引选项,对待发送的数据源进行信息标引;\r\n\t[4]您也可点击菜单栏中的“数据源统计”和“文件列表”菜单查看每一路数据源的信息");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CFilesend1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFilesend1Dlg)
DDX_Control(pDX, IDC_EDIT6, m_OutputCtrl);
DDX_Text(pDX, IDC_EDIT1, m_Fileaddr1);
DDX_Text(pDX, IDC_EDIT2, m_Fileaddr2);
DDX_Text(pDX, IDC_EDIT3, m_Fileaddr3);
DDX_Text(pDX, IDC_EDIT4, m_Fileaddr4);
DDX_Text(pDX, IDC_EDIT5, m_Fileaddr5);
DDX_Text(pDX, IDC_EDIT6, m_Output);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFilesend1Dlg, CDialog)
//{{AFX_MSG_MAP(CFilesend1Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_MENUITEM32778, OnHelp)
ON_BN_CLICKED(IDC_BUTTON1, OnBrowse1)
ON_BN_CLICKED(IDC_BUTTON2, OnBrowse2)
ON_BN_CLICKED(IDC_BUTTON3, OnBrowse3)
ON_BN_CLICKED(IDC_BUTTON7, OnBrowse4)
ON_BN_CLICKED(IDC_BUTTON8, OnBrowse5)
ON_COMMAND(ID_Send1, OnSend1)
ON_COMMAND(ID_SEND2, OnSend2)
ON_COMMAND(ID_SEND3, OnSend3)
ON_COMMAND(ID_SEND4, OnSend4)
ON_COMMAND(ID_SEND5, OnSend5)
ON_COMMAND(IDFILE1, OnFile1)
ON_COMMAND(IDFILE2, OnFile2)
ON_COMMAND(IDFILE3, OnFile3)
ON_COMMAND(IDFILE4, OnFile4)
ON_COMMAND(IDFILE5, OnFile5)
ON_COMMAND(ID_AUTO, OnAuto)
ON_COMMAND(IDSINGLE, OnSingle)
ON_COMMAND(IDSTOP, OnStop)
ON_COMMAND(IDNEWUCL, OnNewucl)
ON_COMMAND(IDSTOP1, OnStop1)
ON_COMMAND(IDSTOP2, OnStop2)
ON_COMMAND(IDSTOP3, OnStop3)
ON_COMMAND(IDSTOP4, OnStop4)
ON_COMMAND(IDSTOP5, OnStop5)
ON_COMMAND(IDSTOPALL, OnStop)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SOURCE1WRONG,OnSource1Wrong)
ON_MESSAGE(WM_SOCKET1WRONG,OnSocket1Wrong)
ON_MESSAGE(WM_SOURCE2WRONG,OnSource2Wrong)
ON_MESSAGE(WM_SOCKET2WRONG,OnSocket2Wrong)
ON_MESSAGE(WM_SOURCE3WRONG,OnSource3Wrong)
ON_MESSAGE(WM_SOCKET3WRONG,OnSocket3Wrong)
ON_MESSAGE(WM_SOURCE4WRONG,OnSource4Wrong)
ON_MESSAGE(WM_SOCKET4WRONG,OnSocket4Wrong)
ON_MESSAGE(WM_SOURCE5WRONG,OnSource5Wrong)
ON_MESSAGE(WM_SOCKET5WRONG,OnSocket5Wrong)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -