📄 bstvdlg.cpp
字号:
// BSTVDlg.cpp : implementation file
//
#include "stdafx.h"
#include "BSTV.h"
#include "BSTVDlg.h"
#include "UCLDlg.h"
#include "winsock.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CBSTVApp theApp; // 5 在此引用应用类中的theApp来获取库连接指针
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
BOOL bStop;//定义bStop为false
BOOL bStop2;
BOOL bStop3;//定义bStop为false
BOOL bStop4;
CString FileName[100];
CString strType[100];
CString strName[100];//节目名
CString strNameB;//文件名
CString FileName2[100];
CString strType2[100];
CString strName2[100];//节目名
CString strName2B;//文件名
int nFileCount;
int nFileCount2;
long j=0,k;
long j2=0,k2;
//定义、初始化要发送文件的“总包数”:
long m_PacketTotalNum=0;
long m_PacketTotalNum2=0;
//定义、初始化“当前传送包”:
long m_PacketSerialNum=0;
long m_PacketSerialNum2=0;
//定义一个指向源文件的指针:
FILE *m_pSourceFile=NULL;
FILE *m_pSourceFile2=NULL;
//定义一个字符串变量,用来暂存“欲发送文件的路径名”:
//CString MidString="";
char buffer[L+100]={""};
char buffer2[L+100]={""};
//定义一个指向发送套接字的指针:
CSocket *m_pSendSocket=NULL;
CSocket *m_pSendSocket2=NULL;
int m_Recv_Port=7001;
int m_Recv_Port2=7002;
UINT SourceFile(LPVOID param)
{
m_pSendSocket=new CSocket();
if(!m_pSendSocket->Create(8001,SOCK_DGRAM))
{
AfxMessageBox("创建套接字失败");
}
long i;//定义一个长整型变量,读取源文件中的数据时将要用到
_variant_t var;
while(!bStop2)//不按“停止”就一直执行
{
for(int FileSendNum=0;(FileSendNum<nFileCount)&&(!bStop2);FileSendNum++)
{
try
{
// try to open the file
CFile sysFile(_T(FileName[FileSendNum]), CFile::modeRead);
strNameB=(LPCTSTR) sysFile.GetFileName();
// close the file handle
sysFile.Close();
sprintf(buffer+L+60,"%s",strNameB);//把文件名放到发送数据包中
sprintf(buffer+L+20,"%s",strName[FileSendNum]);//把文件名放到发送数据包中
sprintf(buffer+L+12,"%s",strType[FileSendNum]);
}
catch (CFileException* pEx)
{
// if an error occurs, just make a message box
pEx->ReportError();
pEx->Delete();
}
if((m_pSourceFile=fopen(FileName[FileSendNum],"rb"))==NULL)
{
AfxMessageBox("打开文件失败!");
}
bStop=0;
WIN32_FIND_DATA FindFileData;
FindClose(FindFirstFile(FileName[FileSendNum],&FindFileData));
k=FindFileData.nFileSizeLow;
m_PacketTotalNum=k/L+1;//刚改过来
memcpy(buffer+L+4,&m_PacketTotalNum,4);//发送总的文件包数
m_PacketSerialNum=0;
//开始发送文件
while(!bStop&&!bStop2)
{
::PostMessage((HWND)param,WM_SENDSERIAL,0,0);//显示"当前传送包"
for(i=0;i<L && !feof(m_pSourceFile);i++)
buffer[i]=fgetc(m_pSourceFile);
memcpy(buffer+L,&i,4);//数据包大小写到缓冲区
memcpy(buffer+L+8,&m_PacketSerialNum,4);//当前发送数据包
m_PacketSerialNum++;
if(feof(m_pSourceFile))//如果检测到文件已经结束(已经发送完)
{
i--;//i(实际收到的字节数)自减,
memcpy(buffer+L,&i,4);
// rewind(m_pSourceFile);//文件指针回到开头
bStop=1;
if(m_pSourceFile)//如果源文件还处于打开状态
fclose(m_pSourceFile);//关闭源文件
m_PacketSerialNum=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
m_pSendSocket->SendTo(buffer,L+100,m_Recv_Port,"127.0.0.1",0);//刚加的
::Sleep(50);
continue;
}
m_pSendSocket->SendTo(buffer,L+100,m_Recv_Port,"127.0.0.1",0);
::Sleep(50);
}//发送文件结束
if(bStop&&(FileSendNum==nFileCount))//所有文件都发送完毕
{
if(m_pSourceFile)//如果源文件还处于打开状态
fclose(m_pSourceFile);//关闭源文件
return 0;//函数返回0值
}
}//for循环
if(bStop2)
{
if(m_pSendSocket)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket;//删除发送套接字m_pSendSocket
m_pSendSocket=NULL;//复原
if(m_pSourceFile)//如果源文件还处于打开状态
fclose(m_pSourceFile);//关闭源文件
return 0;//函数返回0值
}
}//while循环
}
UINT SourceFile2(LPVOID param)
{
m_pSendSocket2=new CSocket();
if(!m_pSendSocket2->Create(8002,SOCK_DGRAM))
{
AfxMessageBox("创建套接字失败");
}
long i2;//定义一个长整型变量,读取源文件中的数据时将要用到
_variant_t var;
while(!bStop4)//不按“停止”就一直执行
{
for(int FileSendNum2=0;(FileSendNum2<nFileCount2)&&(!bStop4);FileSendNum2++)
{
try
{
// try to open the file
CFile sysFile2(_T(FileName2[FileSendNum2]), CFile::modeRead);
strName2B=(LPCTSTR) sysFile2.GetFileName();
// close the file handle
sysFile2.Close();
sprintf(buffer2+L+60,"%s",strName2B);//把文件名放到发送数据包中
sprintf(buffer2+L+20,"%s",strName2[FileSendNum2]);//把文件名放到发送数据包中
sprintf(buffer2+L+12,"%s",strType2[FileSendNum2]);
}
catch (CFileException* pEx)
{
// if an error occurs, just make a message box
pEx->ReportError();
pEx->Delete();
}
if((m_pSourceFile2=fopen(FileName2[FileSendNum2],"rb"))==NULL)
{
AfxMessageBox("打开文件失败!");
}
bStop3=0;
WIN32_FIND_DATA FindFileData2;
FindClose(FindFirstFile(FileName2[FileSendNum2],&FindFileData2));
k2=FindFileData2.nFileSizeLow;
m_PacketTotalNum2=k2/L+1;//刚改过来
memcpy(buffer2+L+4,&m_PacketTotalNum2,4);//发送总的文件包数
m_PacketSerialNum2=0;
//开始发送文件
while(!bStop3&&!bStop4)
{
::PostMessage((HWND)param,WM_SENDSERIAL2,0,0);//显示"当前传送包"
for(i2=0;i2<L && !feof(m_pSourceFile2);i2++)
buffer2[i2]=fgetc(m_pSourceFile2);
memcpy(buffer2+L,&i2,4);//数据包大小写到缓冲区
memcpy(buffer2+L+8,&m_PacketSerialNum2,4);//当前发送数据包
m_PacketSerialNum2++;
if(feof(m_pSourceFile2))//如果检测到文件已经结束(已经发送完)
{
i2--;//i(实际收到的字节数)自减,
memcpy(buffer2+L,&i2,4);
// rewind(m_pSourceFile);//文件指针回到开头
bStop3=1;
if(m_pSourceFile2)//如果源文件还处于打开状态
fclose(m_pSourceFile2);//关闭源文件
m_PacketSerialNum2=0;//将“当前传送包(m_PacketSerialNum)”的值复0,重新计数
m_pSendSocket2->SendTo(buffer2,L+100,m_Recv_Port2,"127.0.0.1",0);//刚加的
::Sleep(50);
continue;
}
m_pSendSocket2->SendTo(buffer2,L+100,m_Recv_Port2,"127.0.0.1",0);
::Sleep(50);
}//发送文件结束
if(bStop3&&(FileSendNum2==nFileCount2))//所有文件都发送完毕
{
if(m_pSourceFile2)//如果源文件还处于打开状态
fclose(m_pSourceFile2);//关闭源文件
return 0;//函数返回0值
}
}//for循环
if(bStop4)
{
if(m_pSendSocket2)//如果发送套接字m_pSendSocket还有效
delete m_pSendSocket2;//删除发送套接字m_pSendSocket
m_pSendSocket2=NULL;//复原
if(m_pSourceFile2)//如果源文件还处于打开状态
fclose(m_pSourceFile2);//关闭源文件
return 0;//函数返回0值
}
}//while循环
}
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()
/////////////////////////////////////////////////////////////////////////////
// CBSTVDlg dialog
CBSTVDlg::CBSTVDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBSTVDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBSTVDlg)
m_ctsFileaddr = _T("节目等待发送第一路");
m_ctsFileaddr2 = _T("节目等待发送第二路");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBSTVDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBSTVDlg)
DDX_Control(pDX, IDC_LISTSEND2, m_AccessListSend2);
DDX_Control(pDX, IDC_ReceivePort1, m_ReceivePort1);
DDX_Control(pDX, IDC_ReceivePort2, m_ReceivePort2);
DDX_Control(pDX, IDC_SEND, m_ctlBsend);
DDX_Control(pDX, IDC_LISTSEND, m_AccessListSend);
DDX_Control(pDX, IDC_LISTACCESS, m_AccessList);
DDX_Text(pDX, IDC_PROCESS, m_ctsFileaddr);
DDX_Text(pDX, IDC_PROCESS2, m_ctsFileaddr2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBSTVDlg, CDialog)
//{{AFX_MSG_MAP(CBSTVDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_READACCESS, OnReadaccess)
ON_BN_CLICKED(IDC_WRITEACCESS, OnWriteaccess)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_LBN_SELCHANGE(IDC_LISTACCESS, OnSelchangeListaccess)
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_LBN_SELCHANGE(IDC_LISTSEND, OnSelchangeListsend)
ON_BN_CLICKED(IDC_SENDADD, OnSendadd)
ON_BN_CLICKED(IDC_SENDDELET, OnSenddelet)
ON_BN_CLICKED(IDC_STOP, OnStop)
ON_BN_CLICKED(IDC_ReceivePort1, OnReceivePort1)
ON_BN_CLICKED(IDC_ReceivePort2, OnReceivePort2)
ON_BN_CLICKED(IDC_SENDADD2, OnSendadd2)
ON_LBN_SELCHANGE(IDC_LISTSEND2, OnSelchangeListsend2)
ON_BN_CLICKED(IDC_SENDDELET2, OnSenddelet2)
ON_BN_CLICKED(IDC_SEND2, OnSend2)
ON_MESSAGE(WM_SENDSERIAL,OnSendSerial)//---------------------------------模拟一个按钮
ON_MESSAGE(WM_SENDSERIAL2,OnSendSerial2)
ON_BN_CLICKED(IDC_STOP2, OnStop2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBSTVDlg message handlers
//////////////////////////////////////////////////////////////////////////////
//名称:OnInitDialog
//功能:初始化对话框
/////////////////////////////////////////////////////////////////////////////
BOOL CBSTVDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// Add "About..." menu item to system menu.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -