江苏科技大学学报自然科学版
主办单位:江苏教育厅
国际刊号:1673-4807
国内刊号:32-1765/N
学术数据库优秀期刊 《中文科技期刊数据库》来源期刊
       首 页   |   期刊介绍   |   新闻公告   |   征稿要求   |   期刊订阅   |   留言板   |   联系我们   
  本站业务
  在线期刊
      最新录用
      期刊简明目录
      本刊论文精选
      过刊浏览
      论文下载排行
      论文点击排行
      
 

访问统计

访问总数:23936 人次
 
    本刊论文
基于Socket技术的计算机远程控制实现

  摘要:随着计算机互联网的不断发展,计算机远程控制技术在远程办公,远程教育,远程维护等领域被广泛使用。针对计算机远程控制程序的需求,该文实现了一个基于TCP/IP协议的计算机远程控制程序,该程序使用SOCKET网络编程技术及MFC界面设计技术,通过对端口的监听实现计算机远程关机、文件上传及下载以及文件管理等功能。


  关键词:计算机远程控制;服务器;客户端;Socket中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)19-4565-03Implementation of Computer Remote Control Based on Socket TechnologyZHU Liang, YING Jie(University of Shanghai for Science & Technology, Shanghai 200093, China)Abstract: With the development of computer network, remote control technology is widely used in telecommuting, distance education and remote maintenance. According to the needs of remote control program, a remote control program based on TCP/IP protocol was proposed in this paper. The program uses socket network programming technology and MFC software designing technology. It achieves remote shutdown, downloading, uploading and some other functions of file management.


  Key words: Socket; computer remote control; server; client随着网络以及计算机软硬件的不断发展,计算机远程管理及技术支持的需求不断增加,计算机远程操作及控制技术越来越引起人们的关注。如今,远程控制软件已经成为了软件技术支持消费中第三个增长最快的领域。目前主流的计算机远程控制软件有PCAnywhere, RemoteAnywhere, Rsuupport远程系列, VNC, Mikogo等。但有些软件的缺点是安装包太大,窗口刷新速度过慢,有些功能太过繁琐使得操作过于复杂,有些安全性不够。本文设计实现了一个能够满足基本远程控制功能的便捷计算机远程控制程序的服务器端和客户端。


  1 服务器端设计服务器端和客户端是基于Socket技术实现的。CSocket是MFC在CAsyncSocket类基础上派生出的一个同步阻塞Socket的封装类,并且在使用MFC的Socket编程时必须要包含afxsock.h这个头文件,同时还要先调用AfxSocketInit()函数。CSocket主要函数包括如下几个函数:创建套接字函数Create、设置套接字选项函数SetSockOpt、连接函数Connect、监听函数Listen、接收外部连接函数Accept和OnAccept、发送数据函数Send、接收数据函数Receive和OnReceive以及关闭套接字函数Close。


  服务器端程序界面如图1所示。服务器端设计具体包括以下几个模块的设计:


  1)服务器设置子模块:服务器设置子模块可以显示本机IP地址,设置Socket通信端口号,以及启动和停止服务。IP地址栏用于显示的是本机IP地址,通过调用本机IP侦测函数GetIP获得。启动服务按钮用于根据IP地址以及端口号创建套接字。停止服务按钮用于关闭套接字。


  2)系统操作子模块:功能是显示当前的系统时间以及结束程序。其程序界面如图3所示。系统时间通过启用了一个定时器,该定时器每隔一秒会调用一次GetTime()函数获取当前系统时间并更新到相关变量中。退出服务按钮通过对当前服务器端程序启动状态的判断决定是否先停止套接字服务然后再退出程序。


  3)系统日志子模块: 用于对服务器端所进行的所有操作进行显示。服务日志列表中显示的系统日志记录是动态更新的,在服务器端程序产生命令操作的时候会将相关行为加入该ListBox中。


  4)消息记录与显示子模块: 主要用于客户端和服务器端用户文字信息的交流。聊天记录列表框的更新原理与系统记录列表框更新原理类似,当接受到OnReceive函数发来的消息时就会将新的消息添加到聊天记录中。发送消息按钮调用监听套接字的数据包发送函数发送包含文字信息的自定义数据包。在这个模块中,接收信息是自动的,但是由于多客户端的存在,所以发送消息的对象就要通过在客户端列表中先进行选择然后将消息发送给选择的客户端。


  5)消息调用模块: 本模块的功能是根据监听套接字接受到的自定义数据包的类型进行相关操作函数的调用,并根据操作函数的返回值判断行为结果并向客户端发送反馈信息。


  6)系统功能模块包括:关机、文件操作和目录操作。通过调用相关的API函数进行操作。也就是服务器端执行命令的具体体现。


  7)文件收发模块: 采用多线程模式,其传输的原理如图2所示。图中自上而下为程序的进行方向,黑色箭头表示客户端和服务器端之间PACKAGE的传输。其中把客户端和服务器端都分为3个进程:主进程,文件传输进程和消息进程。创建进程使用函数AfxBeginThread。当文件传输进程结束操作后自动结束该进程。


  2 客户端设计计算机远程控制客户端程序界面如图3所示。客户端程序设计主要包括以下几个模块:


  1)客户端列表子模块:在这个模块中,可以自动显示新连接到服务器的客户端IP,可以通过删除按钮删除客户端并断开连接,也可以修改所选择客户端的权限。客户端列表显示窗口中客户端IP是动态更新的,它与自定义客户端链表CLIENTLIST相对应。其添加操作通过服务器套接字的OnAccept函数自动添加。删除客户端按钮用于删除客户端链表CLIENTLIST中对应的客户端结点。更改权限按钮会在CLIENTLIST链表中找到对应的client结点,并修改其中的权限变量。其实现代码如下。


  void CServerDlg::OnButtonChangeRight(){OnLButtonChangeListClient(); //完成ListBox中选择项目的更新(GetCurSel)CLIENTLIST *psSearch,*psSearchbefore;psSearch=psHead; //psHead为链表表头结点for(int nCounti=0, psSearchbefore=psHead, psSearch=psHead->next; nCounti!=nClientselect; nCounti++, psSearch=psSearch->next, psSearchbefore=psSearchbefore->next);CString Selectclient;cClientlist.GetText(nClientselect,Selectclient); //cClientlist为ListBox的control变量cClientlist.DeleteString(nClientselect);if(psSearch->clientright==0) // clientright为权限变量{Selectclient=Selectclient+_T(" -")+_T("关机权限");//用于向主窗口添加记录psSearch->clientright=1;}


  else{Selectclient=Selectclient.Left(Selectclient.Find(_T(" -")));psSearch->clientright=0;}


  cClientlist.InsertString(nClientselect,Selectclient.GetBuffer());}


  2)服务器设置模块:用于设置与服务器建立连接,当客户端和服务器端连接成功时,就会显示连接成功的消息反馈。IP地址默认为本机地址,输入服务器端的IP地址与端口号就能与服务器成功连接。连接/断开连接原理与服务器的启动/停止服务原理相同。


  3)文字消息模块:客户端文字消息模块和服务器的消息记录显示模块实现原理类似。


  4)命令发送模块:本模块包括9个功能,分别为下载/上传/删除/重命名文件,获取当前路径,新建/删除/重命名文件夹以及关闭计算机(关机按钮因排版需要放于它处)。这些命令中除了文件上传和下载以外,其它命令功能的本质都只是由客户端把命令发送给服务器,所以它们调用的都是数据包发送函数,只是发送数据包中具体的数据不同罢了。


  5)系统信息模块:主要用于显示来自服务器端的反馈信息,其实现原理与文字通讯原理相同。


  3 全局数据结构在本程序中使用到了两个自定义数据类型。


  ① CLIENTLIST这是一个自定义客户端信息链表,每个结点表示一个与服务器连接的客户端信息。


  typedef struct clientlist{class CClientSocket clientsocket; //监听套接字CString clientaddress; //客户端IP地址int clientright; //客户端权限struct clientlist *next;}CLIENTLIST;② PACKAGE这是一个用于交换信息的自定义数据包结构体,其定义如下:


  typedef enum {disconnect, message, response, closecomputer, filepackage, renamefile, removefile, downloadfile, uploadfile, renamedirectory, removedirectory, getdirectory, createdirectory} PACKAGESTYLE;typedef struct{PACKAGESTYLE packagestyle; //该枚举类型用以表示本数据包包含信息的类型char sender[16]; //数据包的发送方char receiver[16]; //数据包的接收方char packagemessage[512]; //数据包基本信息char packageappendix[256]; //数据包扩展信息ULONGLONG filesize; //发送文件的长度UINT fileindex; //发送文件的编号,用于今后客户端和服务器之间多文件通讯char filecontent[5120]; //文件数据包内容}PACKAGE;4 总结本程序中服务器程序功能包括与多个客户端之间建立连接、为每个客户端分配权限、与多个客户端之间进行文字通信、记录客户端的操作行为、执行客户端发送的操作请求并反馈信息等。客户端程序功能包括与服务器建立链接、与服务器端进行文字通信、向服务器发送操作请求等。


  随着网络技术的进一步发展,网络速度越来越快,家庭办公将成为未来的时尚,远程技术支持将逐渐占据技术支持的主流。远程教学和培训也将快速发展。随着3G手机互联网的大力发展,基于3G网络的智能手机也在不断发展,并且很明显已经有了和计算机网络互连的趋势,相信在不久的将来,会出现手机操作系统和计算机操作系统所共存的远程控制软件,并且通过3G网络和计算机互联网的融通,通过移动终端操纵远程计算机也必将成为一个趋势。


  参考文献:


  [1] 张友生。远程控制编程技术[M].北京:电子工业出版社,2002.


  [2] 张军。Visual C++实例精通[M].北京:机械工业出版社,2009.


  [3] 李淑馨,Visual C++ 2008 程序设计[M].北京:清华大学出版社,2009.


  [4] 郭晓鹏。Visual C++ 高级编程及其项目应用开发[M].北京:中国水利水电出版社,2003[5] Matthew Naugle.Illustrated TCP/IP.Wiley Computer Publishing,1998.


  [6] Rajeev Bharadhwaj.Communications System For Client.http://www.google.com.hk/ patents,1997.


特别说明:本站仅协助已授权的杂志社进行在线杂志订阅,非《江苏科技大学学报自然科学版》杂志官网,直投的朋友请联系杂志社。
版权所有 © 2009-2024《江苏科技大学学报自然科学版》编辑部  (权威发表网)   苏ICP备20026650号-8