admin管理员组文章数量:1532440
2024年5月1日发(作者:)
c语言写简单远程控制源代码首先讲一下两方的通信过程:服务端启动后就进行监
听,客户端主动连接服务端,连接成功后为其建立一个线程接收控制命令并进行处
理。下面讲解客户端的实现。客户端的功能其实很简单,只要连接上服务端后就基
本什么不用做了,当用户点击“发送控制”按钮后根据控制选项构造不同的命令进行
发送。下面是连接服务端的代码: // 得到服务端IPBYTE
ch1ch2ch3ch4m_ressch1ch2ch3ch4m_1ch2c
h3ch4WSADATA wsint retstruct sockaddr_in serverifWSAStartupMAKEWORD22ws
0returnifsClient
socketAF_INETSOCK_STREAM0INVALID__family
AF__port htonsm__addr.s_addr
inet_addrm_strServerifconnectsClientstruct sockaddr serversizeofserver
0m_dowText已连接上 TCP端口:12345下面是“发送控制”按钮的响
应函数,本示例程序中只有三种基本功能:信息发送(使对方弹出一个对话框,显
示您所发送过去的信息)、系统控制(包括关机、重启、截获屏幕、弹出/关闭光驱
5个子功能)、鼠标控制(包括随机移动、禁用输入、交换左右键3个子功能)。我
使用了三个单选框来确定是哪类基本类型的控制,下拉框来进行子功能选择。因此
每次控制要发送两次控制,第一次确定基本功能,第二次确定子功能。 char
CmdBuffer1024char CmdType5CString strBufferint iSelectHANDLE hThreadDWORD
dwThread// 构造命令ifm_ck 1 // 发送消息
m_dowTextstrBuffer // 得到输入框中的内容
sprintfCmdBuffersstrBuffersprintfCmdTypec’S’else ifm_ck 1 // 系统
控制// 只发送下拉框返回的选项索引号,服务端直接根据该索引确定子功能命令
iSelect m_SelsprintfCmdBufferdiSelectsprintfCmdTypec’C’else
ifm_ck 1 // 鼠标控制iSelect
m_SelsprintfCmdBufferdiSelectsprintfCmdTypec’M’elsereturn// 首
先发送命令基本类型int ret sendsClientCmdTypestrlenCmdType 10ifret
SOCKET_ERROR ret 0return 第 1 页// 发送子功能号ret
sendsClientCmdBufferstrlenCmdBuffer 10ifret SOCKET_ERROR ret
0returnreturn下面再贴一段如何使服务端截获到的屏幕图像显示在picture控件中,因
为时间比较紧张,我没有把图像传输这一块儿做好,就给偷了个懒,服务端截获到
屏幕后直接保存在C盘根目录下,而控制端直接到该位置读取,哈哈,专门跟老师
说了下,老师考虑到时间限制就放我了一马,其实就是用某些编码算法将图片压缩
一下就可以了,例如JPEG,懒得弄了。HBITMAP hBitmap
HBITMAPLoadImageAfxGetInstanceHandleC:GE_BITMAP00LR_CREA
TEDIBSECTIONLR_LOADFROMFILECDC pDc
GetDlgItemIDC_FILE_STATIC-GetDCCDC
CompatibleDCpDcCRect rectGetClientRectrectHBITMAP
OldBitmap
screen00SRCCOPYreturn下面来看服务端,老规矩,先来看监听的函数。 WSADATA
wsint iAddrSizeHANDLE hThreadDWORD dwThreadstruct sockaddr_in
localclientifWSAStartupMAKEWORD22ws 0returnifsListen
socketAF_INETSOCK_STREAM0INVALID__family
AF__port _addr.S_un.S_addr
INADDR_ANYifbindsListenstruct sockaddrlocalsizeofstruct sockaddr
SOCKET_ERRORclosesocketsListenreturnlistensListen5iAddrSize sizeofclientsClient
acceptsListenstruct sockaddr clientiAddrSizeifsClient
INVALID_SOCKETclosesocketsListenreturn// 创建一个会话线程hThread
CreateThreadNULL0ClientThreadLPVOIDsClient0dwThreadifhThread
NULLreturnCloseHandlehThreadclosesocketsListenWSACleanupreturn再来看线程函数
的代码。 第 2 页SOCKET sock SOCKETparamchar szBuffMAX_PATHint
retwhile1ret recvsockszBuffsizeofszBuff0ifret 0breakelse ifret
SOCKET_ERRORbreakelseszBuffret ’0’switchszBuff0case ’S’: // 显示消息ret
recvsockszBuffsizeofszBuff0szBuffret ’0’ShowMessageszBuffbreakcase ’C’: // 系统
控制ret recvsockszBuffsizeofszBuff0szBuffret ’0’ret
atoiszBuffSystemControlretbreakcase ’M’: // 鼠标控制ret
recvsockszBuffsizeofszBuff0szBuffret ’0’ret
atoiszBuffMouseControlretbreakdefault:breakreturn 0接下来就是三个处理函数了,全
部贴出来。注意这几个函数都要定义成全局的,不要定义成类的成员函数,那样的
话在线程函数里面访问不到。 void ShowMessageLPCTSTR
msg ::MessageBoxNULLmsg信息MB_OKvoid SystemControlint selectswitchselectcase
0:OpenCDoor // 打开光驱breakcase 1:CloseCDoor // 关闭光驱breakcase 2:SnapScreen
// 截获屏幕breakcase 3:PreProcess // 提升进程权限RebootSystem // 重启系统
breakcase 4:PreProcessShutDown //关闭系统breakdefault:breakvoid MouseControlint
selectint i 0int nX 0int nY 0switchselect 第 3 页case 0:// 25秒内随机移动鼠标
fori 0 i
版权声明:本文标题:c语言写简单远程控制源代码 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1714553638a410833.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论