高分求远程控制的详细算法。

lonenomad 2004-11-22 12:42:17
只有源码,不给分。我有一份源码,但对远程控制的设计过程不太了解。急,我先谢谢各位了。
...全文
230 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
loucai 2004-11-23
  • 打赏
  • 举报
回复
up
loka 2004-11-22
  • 打赏
  • 举报
回复
服务端在收到的数据中检测标志字符串,有就执行相对应的命令,over.
lw107 2004-11-22
  • 打赏
  • 举报
回复
up
i_love_star 2004-11-22
  • 打赏
  • 举报
回复
基本就是kingzai的思想
首先定义一个结构(作为发送包的包头)
typedef struct _tagHeaderInfo
{
DWORD dwFlag; // 标志(区别这是个远程控制命令包还是其他作用的包)
DWORD dwSize; // 结构大小
DWORD dwType; // 控制命令的类型(被控端由这个值判断执行什么样的远程操作)
}HEADER_INFO, *PHEADER_INFO, *LPHEADER_INFO;

有可能你的远程控制命令还需要额外信息,比如你想远程打开一个IE且网址为www.csdn.net,则网址就是附加信息.这就需要再定义一个结构
typedef struct _tagOperationA
{
HEADER_INFO header; // 包头
char szURL[MAX_PATH];// 附加URL信息
}OPERATION_A, *POPERATION_A, *LPOPERATION_A;

再比如你想5分钟后强制远程关机,5分钟是额外信息
typedef struct _tagOperationB
{
HEADER_INFO header; // 包头
int nDelayTime; // 附加的关机之前等待时间
BOOL bForceShutDown; // 是否强制关机
}OPERATION_B, *POPERATION_B, *LPOPERATION_B;

这时远程控制打开IE可这样操作
//控制端
BOOL SendIERequest()
{
OPERATION_A OpA;
ZeroMemory(&OpA, sizeof(OPERATION_A);
OpA.header.dwFlag = REMOTECTRL_FLAG; // 远程控制标志
OpA.header.dwsize = sizeof(OPERATION_A);
OpA.header.dwType = REMOTECTRL_IE; // 远程控制打开IE
strcpy(OpA.szURL, "www.csdn.net");
// 假设pSocket是你的通信Socket
pSocket->Send(&OpA, sizeof(OPERATION_A));
return TRUE;
}
远程控制关机可这样操作
//控制端
BOOL SendShutDownRequest()
{
OPERATION_B OpB;
ZeroMemory(&OpB, sizeof(OPERATION_B);
OpB.header.dwFlag = REMOTECTRL_FLAG; // 远程控制标志
OpB.header.dwsize = sizeof(OPERATION_B);
OpB.header.dwType = REMOTECTRL_SHUTDOWN; // 远程控制关机
OpB.nDelayTime = 3; // 3分钟后关机
OpB.bForceShutDown = TRUE;
// 假设pSocket是你的通信Socket
pSocket->Send(&OpB, sizeof(OPERATION_B));
}

被控端的操作
//处理所有发过来的控制请求,做相应处理
BOOL DealWithAllRequest(LPVOID lpBuf) // lpBuf是Socket读过来的信息
{
LPHEADER_INFO pHeader = (LPHEADER_INFO)lpBuf;
if (REMOTECTRL_FLAG == pHeader.dwFlag) // 这是远程控制包
{
switch(pHeader.dwType)
{
case REMOTECTRL_IE:
return RemoteCtrlIE(lpBuf);
case REMOTECTRL_SHUTDOWN:
return RemoteCtrlShutDown(lpBuf);
default:
return FALSE;
}
}
//其他通讯包
}

//打开IE
//被控端
BOOL RemoteCtrlIE(LPVOID lpBuf)
{
LPOPERATION_A pOpA = (LPOPERATION_A)lpBuf;
CString strURL = pOpA->szURL;
//执行打开strURL的操作
::ShellExecute(...., strURL, ...);
return TRUE;
}

//被控端
BOOL RemoteCtrlShutDown(LPVOID lpBuf)
{
LPOPERATION_B pOpB = (LPOPERATION_B)lpBuf;
int nDelayTime = pOpB->nDelayTime;
BOOL bForceShutDown = pOpb->bForceShutDown;
//执行nDelayTime后关机的操作
// ...
// ::ExitWindowsEx(...);
return TRUE;
}
gdy119 2004-11-22
  • 打赏
  • 举报
回复
楼主该不是说的桌面数据压缩?
lonenomad 2004-11-22
  • 打赏
  • 举报
回复
那怎样区分字符和命令啊。
lonenomad 2004-11-22
  • 打赏
  • 举报
回复
那怎样区分字符各命令啊。
PiggyXP 2004-11-22
  • 打赏
  • 举报
回复
其实原理还是socket通信,服务器端根据收到客户端发来的字符执行相应的代码就OK了:)
lonenomad 2004-11-22
  • 打赏
  • 举报
回复
kingzai()说的和我的意思相近,不知那位高人,做过这方面的软件啊。
oyljerry 2004-11-22
  • 打赏
  • 举报
回复
是不是指自己定义一些命令的协议,然后通信双方共同遵守
hjunxu 2004-11-22
  • 打赏
  • 举报
回复
我帮楼主顶一下
不过你的问题好象不怎么好回答啊,呵呵
kingzai 2004-11-22
  • 打赏
  • 举报
回复
你说的远程控制的传输算法,其实就是自定义的一套收发命令,也就是一个你的数据结构。比如发送'A'表示重启,发送'B'表示关机这些。另外一方收到这些命令字后再做相应的操作。
Shires 2004-11-22
  • 打赏
  • 举报
回复
楼主说详细点啊
Shires 2004-11-22
  • 打赏
  • 举报
回复
嗬嗬,不好
lonenomad 2004-11-22
  • 打赏
  • 举报
回复
晕啊
vicky_jam 2004-11-22
  • 打赏
  • 举报
回复
呵呵~~我不是高手我能不能说话:)
“远程控制的详细算法”
什么算法??
所谓的远程控制 就是一个 客户端 一个 服务端
你平时 怎么写这种软件 写马马 也差不多

你指得算法 应该是 指 比如远程“实时”控制 传输图片 时的算法啦
什么的~~ 传输文件 啊~~

你的问题 太大了~
初学者 以马马 为目标 是很好的
因为里面涉及了 许多 系统 、网络 、文件 、图形...... 的操作 ~~
一个问题都能 提一个问题~~

不过 没有一步登天 的事 所谓的算法 就是计算机的常用算法啊 好好学学~~~
呵呵~~高分我也想要 可惜没有这个本事:)
呵呵~~~~~~
friendzj 2004-11-22
  • 打赏
  • 举报
回复
希望高手尽快出现,呵呵!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧