📄 opam300cdlg.cpp
字号:
nBuf=nBuf-len+i;//除去已写入文件的长度
}
else
{
file.Write(buffer,nBuf);
nBuf=0;
}
}
try
{
while (1)
{
//在这里不停地读传过来的文件的长度
if (nBuf>0)
{
len = recv(ClientSocket, buffer, 1024, 0);
if (len == 0)
{
try
{
file.Close();
break;
}
catch(...)
{
;
}
}
if (nBuf>(len))
{
file.Write(buffer,len);//把多余的写入文件
nBuf=nBuf-len;//除去已写入文件的长度
}
else
{
file.Write(buffer,nBuf);
nBuf=0;
try
{
file.Close();
break;
}
catch(...)
{
;
}
}
}
}
send(ClientSocket,"接收文件成功\r\n",strlen("接收文件成功\r\n"),0);
try
{
pDlg->StartupAm300c();
}
catch(...)
{
;
}
}
catch(...)
{
send(ClientSocket,"文件更新失败\r\n",strlen("文件更新失败\r\n"),0);
}
}
else if (strstr(&szBuf[0],"SendOpAm300c:")!=NULL)
{
int i,j;
char rN[8];
i=0;
j=0;
//解析出文件流的长度
//for (i=11; i<11+8+2; i++)
//pDlg->CloseAm300c();
for (i=13; i<13+8; i++)
{
rN[j]=szBuf[i];
j++;
}
rN[j]=0;
//纪录文件流的长度
TCHAR mychar[10];
memset(mychar,0,9);
charToWCh(&mychar[0],&rN[0]);
nBuf = atoi(mychar);//文件长度
LPCTSTR filename=L"硬盘\\am300c\\amce300_R.exe";//文件名
LPCTSTR newfilename=L"硬盘\\am300c\\amce300_n.exe";
LPCTSTR newfilename2=L"硬盘\\am300c\\amce300_o.exe";
//先把文件接收成AMCE300——R2。EXE
try
{
DeleteFile(newfilename);
}
catch(...)
{
;
}
//DeleteFile(filename);//要接收新的更新程序,必须先要删了原先的文件
CFile file(newfilename,CFile::modeCreate | CFile::modeWrite);//创建新文件
char buffer[1024]={0};//接收缓冲区
if (len > i )
{
// 读接收文件时有文件数据过来
for (j=i+1;j<=len ;j++)
buffer[j-i-1]=szBuf[j];
if (nBuf>(len-i))
{
file.Write(buffer,len-i);//把多余的写入文件
nBuf=nBuf-len+i;//除去已写入文件的长度
}
else
{
file.Write(buffer,nBuf);
nBuf=0;
}
}
try
{
while (1)
{
//在这里不停地读传过来的文件的长度
if (nBuf>0)
{
len = recv(ClientSocket, buffer, 1024, 0);
if (len == 0)
{
try
{
file.Close();
break;
}
catch(...)
{
;
}
}
if (nBuf>(len))
{
file.Write(buffer,len);//把多余的写入文件
nBuf=nBuf-len;//除去已写入文件的长度
}
else
{
file.Write(buffer,nBuf);
nBuf=0;
try
{
file.Close();
break;
}
catch(...)
{
;
}
}
}
}
send(ClientSocket,"接收文件成功\r\n",strlen("接收文件成功\r\n"),0);
//把已收到的文件改成系统认可的文件
//先改名
try
{
DeleteFile(newfilename2);
}
catch(...)
{
;
}
try
{
MoveFile(filename,newfilename2);
//DeleteAndRenameFile(,);
}
catch(...)
{
;
}
try
{
MoveFile(newfilename,filename);
//DeleteAndRenameFile(filename,newfilename);
}
catch(...)
{
;
}
try
{
Sleep(20);
pDlg->CloseAm300c();
send(ClientSocket,"机器正在刷新,稍后请重新连接\r\n",strlen("机器正在刷新,稍后请重新连接\r\n"),0);
pDlg->PowerOff(); //挂起
Sleep(3000); //等待3秒
pDlg->RebootCE(); //Reset
//在更新完OPAM300C程序后重启程序,以便让新程序跑起来
}
catch(...)
{
;
}
}
catch(...)
{
send(ClientSocket,"文件更新失败\r\n",strlen("文件更新失败\r\n"),0);
}
}
//接收音乐文件,上位机提供路径和名称,下位机按接收到的格式保存
else if (strstr(&szBuf[0],"SendMusic:")!=NULL)
{
int i,j;
char rN[8];
i=0;
j=0;
//解析出文件名和路径的长度
char rPathName[50];
for (i=10; i<10+50; i++)
{
rPathName[j]=szBuf[i];
j++;
}
rPathName[j]=0;
CString sPm;
sPm = rPathName;
sPm.TrimLeft(_T("\t "));
LPCTSTR filename=(LPCTSTR)sPm;//文件Path+name
CFile file(filename,CFile::modeCreate | CFile::modeWrite);//创建新文件
j=0;
//解析文件长度
for (i=60; i<60+8; i++)
{
rN[j]=szBuf[i];
j++;
}
rN[j]=0;
//纪录文件路径和名称
TCHAR mychar[10];
memset(mychar,0,9);
charToWCh(&mychar[0],&rN[0]);
nBuf = atoi(mychar);//文件长度
char buffer[1024]={0};//接收缓冲区
if (len > i )
{
// 读接收文件时有文件数据过来
for (j=i+1;j<=len ;j++)
buffer[j-i-1]=szBuf[j];
if (nBuf>(len-i))
{
file.Write(buffer,len-i);//把多余的写入文件
nBuf=nBuf-len+i;//除去已写入文件的长度
}
else
{
file.Write(buffer,nBuf);
nBuf=0;
}
}
try
{
while (1)
{
//在这里不停地读传过来的文件的长度
if (nBuf>0)
{
len = recv(ClientSocket, buffer, 1024, 0);
if (len == 0)
{
try
{
file.Close();
break;
}
catch(...)
{
;
}
}
if (nBuf>(len))
{
file.Write(buffer,len);//把多余的写入文件
nBuf=nBuf-len;//除去已写入文件的长度
}
else
{
file.Write(buffer,nBuf);
nBuf=0;
try
{
file.Close();
break;
}
catch(...)
{
;
}
}
}
/*
else
break;*/
}
try
{
free(buffer);
}
catch(...)
{
;
}
send(ClientSocket,"接收文件成功\r\n",strlen("接收文件成功\r\n"),0);
try
{
//pDlg->StartupAm300c();
}
catch(...)
{
;
}
}
catch(...)
{
send(ClientSocket,"文件更新失败\r\n",strlen("文件更新失败\r\n"),0);
}
}
else if (strstr(&szBuf[0],"AutoReset:")!=NULL)
{
//此处往配置中的文件或什么地方存AutoReset的值;
//并把相关配置内容更新一个全局的变量,此变量也是用于确定到时
//时是否进行重启
int i,j,k;
char restr[20];
j=0;
k=0;
for (i=0; i<strlen(szBuf); i++)
{
if (szBuf[i]==':')
{
restr[k]=szBuf[i+1];
k++;
}
}
restr[k]=0;
//以上已得到了发送过来的值,在下面进行处理
strcpy(pDlg->resA,restr);
try
{
File.Open(L"硬盘\\setup.txt",CFile::modeCreate|CFile::modeWrite,NULL);
File.Write("A",1);
File.Write(restr,strlen(restr));
File.Write("\r\n",2);
File.Close();
pDlg->resD[0]=0;
pDlg->resW[0]=0;
pDlg->resM[0]=0;
send(ClientSocket,"设置成功\r\n",strlen("设置成功\r\n"),0);
}
catch (...)
{
send(ClientSocket,"设置失败\r\n",strlen("设置失败\r\n"),0);
}
try
{
free(restr);
}
catch(...)
{
;
}
//CWinApp *pApp=AfxGetApp();
//i=atoi(restr);
//pApp->WriteProfileInt(_T("Setup"),_T("AutoReset"),i);
}
else if (strstr(&szBuf[0],"DayReset:")!=NULL)
{
//重启的时间
//如果是"ResetTime:0"那么向请求端发一个原定义的时间
//如果是"ResetTime:01:00"那么就设置本地的定时时间
int i,k;
char restr[20];
k=0;
for (i=9; i<strlen(szBuf); i++)
{
if ((szBuf[i]!='\r')&&(szBuf[i]!='\n') && (szBuf[i]!=';'))
{
restr[k]=szBuf[i];
k++;
}
}
restr[k]=0;
//以上已得到了发送过来的值,在下面进行处理
//CWinApp *pApp=AfxGetApp();
if (strcmp(restr,"0")==0)
{
//CString sDayReset;//=pApp->GetProfileString(_T("Setup"),_T("DayReset"));
char bufstr[256];
try
{
File.Open(L"硬盘\\setup.txt",CFile::modeRead,NULL);
File.Read(bufstr,100);
File.Close();
//Add resolve bufstr code ....
pDlg->resolveFile(bufstr);
}
catch(...)
{
strcpy(pDlg->resD,"00:00:00");
}
if (strlen(pDlg->resD)==0)
{
send(ClientSocket,"00:00:00\r\n",strlen("00:00:00\r\n"),0);
}
else
{
char sendbuf[11];
strcpy(sendbuf,pDlg->resD);
strcat(sendbuf,"\r\n");
send(ClientSocket,sendbuf,strlen(sendbuf),0);
free(sendbuf);
}
try
{
free(bufstr);
}
catch(...)
{
;
}
//send(ClientSocket,restr,strlen(restr),0);
}
else
{
//如果参数是真正的时间格式,则写入配置表
//CString sDayReset=restr;
try
{
strcpy(pDlg->resD,restr);
File.Open(L"硬盘\\setup.txt",CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate,NULL);
File.SeekToEnd();
File.Write("D",1);
File.Write(restr,strlen(restr));
File.Write("\r\n",2);
File.Close();
pDlg->resW[0]=0;
pDlg->resM[0]=0;
//pApp->WriteProfileString(_T("Setup"),_T("DayReset"),sDayReset);
send(ClientSocket,"设置成功\r\n",strlen("设置成功\r\n"),0);
}
catch (...)
{
send(ClientSocket,"设置失败\r\n",strlen("设置失败\r\n"),0);
}
}
try
{
free(restr);
}
catch(...)
{
;
}
}
else if (strstr(&szBuf[0],"WeekReset:")!=NULL)
{
//重启的时间
//如果是"ResetTime:0"那么向请求端发一个原定义的时间
//如果是"ResetTime:01:00"那么就设置本地的定时时间
int i,k;
char restr[20];
k=0;
for (i=10;i<strlen(szBuf);i++)
{
if ((szBuf[i]!='\r')&&(szBuf[i]!='\n') && (szBuf[i]!=';'))
{
restr[k]=szBuf[i];
k++;
}
}
restr[k]=0;
//以上已得到了发送过来的值,在下面进行处理
//CWinApp *pApp=AfxGetApp();
if (strcmp(restr,"0")==0)
{
//CString sDayReset;//=pApp->GetProfileString(_T("Setup"),_T("WeekReset"));
//strcpy(restr,(char *)&sDayReset);
char bufstr[256];
try
{
File.Open(L"硬盘\\setup.txt",CFile::modeRead,NULL);
File.Read(bufstr,100);
File.Close();
pDlg->resolveFile(bufstr);
}
catch(...)
{
strcpy(pDlg->resW,"8");
}
if (strlen(pDlg->resW)==0)
{
send(ClientSocket,"8\r\n",strlen("8\r\n"),0);
}
else
{
char sendbuf[11];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -