📄 socket_udpserver.cpp
字号:
*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 + -