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

📄 socket_udpserver.cpp

📁 用数据库控制树型控件现实内容的例子
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;
		Param5 = Cmd1->CreateParameter("MacAddress",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;
		Param6 = Cmd1->CreateParameter("OsType",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;
		Param7 = Cmd1->CreateParameter("ServerPack",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;				
		Param8 = Cmd1->CreateParameter("IEVersion",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;				
		Param9 = Cmd1->CreateParameter("Langu",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;
		Param10 = Cmd1->CreateParameter("CpuType",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;
		Param11 = Cmd1->CreateParameter("CpuFreq",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;
		Param12 = Cmd1->CreateParameter("Memory",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;				
		Param13 = Cmd1->CreateParameter("DiskSize",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;				
		Param14 = Cmd1->CreateParameter("FreeDiskSize",adBSTR,adParamInput,-1,fieldstr.AllocSysString());
		fieldend=strstr(fieldstart,",");
		*fieldend=0;
		fieldstr.Format("%s",fieldstart);
		fieldstart=fieldend+1;				
		Param15 = Cmd1->CreateParameter("KillVersion",adBSTR,adParamInput,-1,fieldstr.AllocSysString() );
		
		v.vt=VT_BOOL;
		v.boolVal=(int)false;
		Param16 = Cmd1->CreateParameter("isInstallKill",adBoolean,adParamInput,-1,v );
		v.boolVal=(int)false;
		Param17 = Cmd1->CreateParameter("isRunKill",adBoolean,adParamInput,-1,v );
		v.boolVal=(int)false;
		Param18 = Cmd1->CreateParameter("isRunComputer",adBoolean,adParamInput,-1,v );
		v.boolVal=(int)false;
		Param19 = Cmd1->CreateParameter("isRegister",adBoolean,adParamInput,-1,v );
		v.boolVal=(int)false;
		Param20 = Cmd1->CreateParameter("Cmd_Install",adBoolean,adParamInput,-1,v );
		v.boolVal=(int)false;
		Param21 = Cmd1->CreateParameter("Cmd_Uninstall",adBoolean,adParamInput,-1,v );

		Cmd1->Parameters->Append( Param3 );
		Cmd1->Parameters->Append( Param4 );
		Cmd1->Parameters->Append( Param5 );
		Cmd1->Parameters->Append( Param6 );
		Cmd1->Parameters->Append( Param7 );
		Cmd1->Parameters->Append( Param8 );
		Cmd1->Parameters->Append( Param9 );
		Cmd1->Parameters->Append( Param10 );
		Cmd1->Parameters->Append( Param11 );
		Cmd1->Parameters->Append( Param12 );
		Cmd1->Parameters->Append( Param13 );
		Cmd1->Parameters->Append( Param14 );
		Cmd1->Parameters->Append( Param15 );
		Cmd1->Parameters->Append( Param16 );
		Cmd1->Parameters->Append( Param17 );
		Cmd1->Parameters->Append( Param18 );
		Cmd1->Parameters->Append( Param19 );
		Cmd1->Parameters->Append( Param20 );
		Cmd1->Parameters->Append( Param21 );
		Cmd1->Parameters->Append( Param22 );

		Cmd1->CommandText = sqlStr.AllocSysString();
		Cmd1->Execute( NULL, NULL, adCmdText );	
	}
	catch(...)
	{
		TRACE("修改过程中数据冲突,可能是有重复的IP地址\r\n");
	}
}

void CSocket_UdpServer::WriteLog(_ConnectionPtr Sdb, char *buf)
{
	CString sqlStr;
	_CommandPtr Cmd1;
	_ParameterPtr Param1,Param2,Param3,Param4;
    sqlStr="insert into cmd_log (IpAddress,cmd_type,results,times) values(?,?,?,?)";
	try
	{
		Cmd1.CreateInstance( __uuidof( Command ) );
		Cmd1->ActiveConnection = Sdb;

		Cmd1->Parameters->Append( Param1 );
		Cmd1->Parameters->Append( Param2 );
		Cmd1->Parameters->Append( Param3 );
		Cmd1->Parameters->Append( Param4 );
		Cmd1->CommandText = sqlStr.AllocSysString();
		Cmd1->Execute( NULL, NULL, adCmdText );	
	}
	catch(...)
	{
		TRACE("WriteLog program error\r\n");
	}

}

DWORD CALLBACK CSocket_UdpServer::ComputerOnlineThread(LPVOID lpParm)
{
	struct  paramstruct  * pParam=(struct  paramstruct  *)lpParm;
    _ConnectionPtr Sdb;
	_CommandPtr Cmd1;
	CString sqlstr,tempstr;
	int h,m;

	CoInitialize(NULL);
    Sdb.CreateInstance(__uuidof(Connection));
    HRESULT hRes;
	try
	{
        hRes=Sdb.CreateInstance(_T("ADODB.Connection"));
		Sdb->ConnectionTimeout = 8;
		//连接ACCESS2000
		hRes=Sdb->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DataBase\\KillData.mdb",
            _T(""),_T(""),adModeUnknown);
	}
	catch(_com_error e)///捕捉异常
	{
		 CString errormessage;
		 errormessage.Format(_T("连接City.mdb数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
		 AfxMessageBox(errormessage);///显示错误信息
		 return 0;
	} 
	Cmd1.CreateInstance( __uuidof( Command ) );
	Cmd1->ActiveConnection = Sdb;

	CString strSection       = "INTERTIME";
	CString strSectionKey    = "TIME";
	char  dirbuf[256];
	GetCurrentDirectory(255,dirbuf);
	CString m_IniFile=dirbuf;
	m_IniFile+="\\killconfig.ini";

	while(true)
	{
		CMainFrame * pMain=(CMainFrame *)AfxGetMainWnd();
		if(pMain==NULL)
			continue;
		GetPrivateProfileString (strSection,strSectionKey, NULL, dirbuf, 80, m_IniFile); 
		int inertime=atoi(dirbuf);//pMain->m_InterTime;
		if(inertime>MAX_INER_TIME)
			inertime=MAX_INER_TIME;
		if(inertime==0)
			inertime=MAX_INER_TIME;
		try
		{
		    h=inertime/3600;
			m=inertime/60;
			sqlstr.Format("update computers set isRunKill=0 , isRunComputer=0 where (Time()- HeartBeatTime) > '%2d:%0.2d:00' ",h,m);
			Cmd1->CommandText=sqlstr.AllocSysString();
			Cmd1->Execute( NULL, NULL, adCmdText );	
		}
		catch(...)
		{
			TRACE("ComputerOnlineThread program error\r\n");
		}
		Sleep(inertime*1000);
	}
	return 1;
}


void CSocket_UdpServer::InstallBack(_ConnectionPtr Sdb, char *buffer, SOCKET S, int ipnum)
{
	_CommandPtr Cmd1;
	CString sqlstr;
	CString  fieldstr;

	try
	{
		Cmd1.CreateInstance( __uuidof( Command ) );
		Cmd1->ActiveConnection = Sdb;
		sqlstr.Format("update computers set Cmd_Install=0 where IpAddressNum=%d ",ipnum);

		Cmd1->CommandText=sqlstr.AllocSysString();
		Cmd1->Execute( NULL, NULL, adCmdText );	
	}
	catch(...)
	{
	}
}

void CSocket_UdpServer::UnInstallBack(_ConnectionPtr Sdb, char *buffer, SOCKET S, int ipnum)
{
	_CommandPtr Cmd1;
	CString sqlstr;
	CString  fieldstr;
	try
	{
		Cmd1.CreateInstance( __uuidof( Command ) );
		Cmd1->ActiveConnection = Sdb;
		sqlstr.Format("update computers set Cmd_Uninstall=0 where IpAddressNum=%d ",ipnum);
		Cmd1->CommandText=sqlstr.AllocSysString();
		Cmd1->Execute( NULL, NULL, adCmdText );	
	}
	catch(...)
	{
	}
}


//收到心跳数据包后,检查是否还有没有发送的命令,如果有就发送出去
void CSocket_UdpServer::HeartBeatSendData(_ConnectionPtr Sdb,long ipnum)
{
	char  packet[MAX_PACKET_SIZE];
	char  url[256];
	int   packetlen;
	int   port;
	CString sqlStr;
	DataPacketHeader PacketHeader;
	_RecordsetPtr m_pRecordset;    //
	HRESULT hTRes;
	try
	{
		sqlStr.Format("select * from computers where IpAddressNum=%ld",ipnum);
		hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset"));
		if (SUCCEEDED(hTRes))
		{
            //----------------------------------------------------
	        hTRes = m_pRecordset->Open(sqlStr.AllocSysString(),
		         _variant_t((IDispatch *)Sdb,true),
				 adOpenStatic,adLockOptimistic,adCmdText);
			int i=m_pRecordset->GetRecordCount();
			if(!m_pRecordset->adoEOF)
			{
				int len;
				sockaddr_in server;

				CMainFrame * pMain=(CMainFrame *)AfxGetMainWnd();
	char inBuf[80];
	char appPath[256];
	CString m_IniFile;
	GetCurrentDirectory(256,appPath); //取得应用程序当前路径
	m_IniFile.Format("%s",appPath);
	m_IniFile+="\\killconfig.ini";

	// TODO: Add extra initialization here

	CString strSection       = "SERVER_PORT";
	CString strSectionKey    = "CLIENT_PORT";
	GetPrivateProfileString (strSection,strSectionKey, NULL, inBuf, 80, m_IniFile); 
	port=atoi(inBuf);

//				port=pMain->m_ClientPort;
				m_pRecordset->MoveFirst();
				bool install,uninstall;
				install=m_pRecordset->GetCollect("Cmd_Install").boolVal;
				uninstall=m_pRecordset->GetCollect("Cmd_UnInstall").boolVal;

				if(!(m_pRecordset->GetCollect("Cmd_Install").boolVal || m_pRecordset->GetCollect("Cmd_UnInstall").boolVal))
					goto overle;
				PacketHeader.ComputerId=ipnum;

				if(m_pRecordset->GetCollect("Cmd_Install").boolVal)
				{
					PacketHeader.function=6;  //安装
//					strcpy(url,pMain->m_InstallUrl.GetBuffer(0));
				}
				else 
				{
					PacketHeader.function=7;  //卸载
//					strcpy(url,pMain->m_UnInstallUrl.GetBuffer(0));
				}

				strcpy(PacketHeader.sysinfo,SYSTEMINFOSTR);
				PacketHeader.mesagelen=pMain->m_InstallUrl.GetLength()+pMain->m_UnInstallUrl.GetLength()+3;
				memset(packet,0,MAX_PACKET_SIZE);
				packetlen=sizeof(PacketHeader);
				memcpy(packet,&PacketHeader,packetlen);
		sprintf(packet+packetlen,"%s,%s",pMain->m_InstallUrl.GetBuffer(0),pMain->m_UnInstallUrl.GetBuffer(0));
//				strcpy(packet+packetlen,url);
				packetlen+=PacketHeader.mesagelen;

				len =sizeof(server);
				server.sin_family=AF_INET;
				server.sin_port=htons(port); ///server的监听端口
				server.sin_addr.s_addr=ipnum; ///server的地址 

				if (sendto(pMain->m_SocketServer.m_Udpsocket,packet,packetlen,0,(struct sockaddr*)&server,len)==SOCKET_ERROR)
				{
//					AfxMessageBox("还没有启动socket服务");
				}
overle:
				m_pRecordset->Close();
			}
			else
				m_pRecordset->Close();
		}
//		else
//			m_pRecordset->Close();
	}
	catch(...)
	{
	}
}

void CSocket_UdpServer::CheckPassword(char *password, SOCKET server, sockaddr_in from,long int ipnum)
{
	try
	{
		char inBuf[256];
		char packet[MAX_PACKET_SIZE];
		CString m_IniFile;
		DataPacketHeader SendPacketHeader;
		GetCurrentDirectory(256,inBuf); //取得应用程序当前路径
		m_IniFile.Format("%s",inBuf);
		m_IniFile+="\\killconfig.ini";

		ZeroMemory(packet,MAX_PACKET_SIZE);
		CString strSection       = "PASSWORD";
		CString strSectionKey    = "PASSWORD";
		GetPrivateProfileString (strSection,strSectionKey, NULL, inBuf, 80, m_IniFile); 

		SendPacketHeader.function=131;
		strcpy(SendPacketHeader.sysinfo,SYSTEMINFOSTR);
		SendPacketHeader.ComputerId=ipnum;
		SendPacketHeader.mesagelen=1;

		memcpy(packet,&SendPacketHeader,sizeof(SendPacketHeader));
		if(strcmp(password,inBuf)==0)
		{
			memcpy(packet+sizeof(SendPacketHeader),"1",SendPacketHeader.mesagelen);
		}
		else
		{
			memcpy(packet+sizeof(SendPacketHeader),"0",SendPacketHeader.mesagelen);
		}
		sendto(server,packet,sizeof(SendPacketHeader)+2+SendPacketHeader.mesagelen,0,(struct sockaddr*)&from,sizeof(from));
		return;
	}
	catch(...)
	{
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -