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

📄 opam300cdlg.cpp

📁 wince下接受网络控制命令进行相应操作,远程控制的东西
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						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 + -