Sever Remote Control程序作品+源代码

 

这次这个软件仍然是用C编的,可以在linux环境下实现:下载文档,编辑文档,关闭远程主机,重新启动远程主机,修改管理员密码这五个功能.
由于编程只是本人的业余爱好,水平实在有限,所以软件做的比较垃圾,希望各位高手不吝赐教
此软件只能在linux环境下运行.
服务器实现的关键代码如下:
int main(int argc, char** argv)
//argc为参数的个数,argv[0]对应程序, argv[1]对应-p, argv[2]对应端口号
{
    ………………………………
  if (argc != 3 || strcmp(argv[1], "-p") || (port = atoi(argv[2])) < 1024) {
//argc不为0,或argv[1]不为-p,或端口号<1024,则退出
    ………………………………
  }
  if (uname(&myname) < 0 || (he = gethostbyname(myname.nodename)) == NULL) {
    //获得主机名
    ………………………………
  }
  hostaddr = *(unsigned long *)(he->h_addr);
  listen_fd = init_socket(port);        
//初始化套接字,创建,绑定并监听socket
  if ((p = strrchr(argv[0], '/')) != NULL)  
//取得”/”最后一次出现处到結尾的字串,即程序名,赋值给p
    p ++;
  else
    p = argv[0];  
//如果p为NULL,则argv[0]就是程序名, 赋值给p
  sprintf(root_path, "/app/%s", p);   //路径:app下的程序名
  p = argv[0] + strlen(argv[0]) - 1;
  while (*p && *p != '/') {
    *p = toupper(*p);         //将字符转化为大写英文字符
    p --;
  }
  daemon( 1, 1 );             //守护程序
  syslog(LOG_ERR, "*** Starting %s on %s ***", p + 1, inet_ntoa(*(struct in_addr *)&hostaddr));                 //在系统日志中写入相关信息
  ………………………………
  for (;;) {              
    FD_ZERO( &afdset );        
//afdset为文件描述符集,现清空afdset与所有文件句柄的联系。
    maxfd = -1;            
    FD_SET( listen_fd, &afdset );   //加入套接字
    if ( listen_fd > maxfd )
        maxfd = listen_fd;       //将maxfd的值始终保持最大值
    if (select(maxfd + 1, &afdset , NULL, NULL, NULL) < 0)
        continue;
  ………………………………
    if (FD_ISSET( listen_fd, &afdset ) )
        conn_fd = accept( listen_fd, (struct sockaddr *)&usa, &sz );
  //返回值   成功:返回最后的服务器端的文件描述符,这个时候服务器端可以向该描述符写信息了。即 conn_fd = listen_fd。
失败:返回-1。即conn_fd = -1。
    else
        continue;
………………………………
    if ((r = fork()) < 0 ) {
    //fork( )的主要任务是初始化要创建进程的数据结构. 当fork()!=0 的时候,表明是父进程,要终止
………………………………
    } else if ( r == 0 ) {  
//当fork()==0 的时候,表明是子进程,执行
        client_addr = usa;
        close( listen_fd );    
//将套接口做上“已关闭的标记”,并立即返回进程
        get_http(); //通过该函数获得HTTP协议的请求方法,并调用do_cgi()
        exit( 0 );
    }
    close( conn_fd );
  }
}

下载文档功能实在的关键代码如下:
my_cgi()
{………………………………
else if (strcmp(p, "download") == 0)
//判断表单变量,如果是download则运行down_load函数
    down_load();     //显示下载文档界面,并指定对演示文档的操作方式
………………………………
}
static down_load()
{………………………………
if ((p = getenv("PATH_INFO")) == NULL ||
    strncmp(p, "/demo/", 6) != 0) {
    disp_file_menu(0);  
//通过判断路径信息和文档信息,调用disp_file_menu(0),参数0表示出现下载文档界面
    return;
  }

if ((fp = fopen(fn, "r")) != NULL) { // fopen(fn, "r")表示以只读方式打开文件fn
    while ((i = fread(buf, 1, 4096, fp)) > 0)
        fwrite(buf, 1, i, stdout);
    fclose(fp);                 //对所选择的文档进行下载
………………………………
}

编辑文档功能实现的关键代码如下:
void edit_file()
{ ………………………………
    disp_file_menu(1);  
//通过判断路径信息和文档信息,调用disp_file_menu(1),参数1表示出现编辑文档界面
  ………………………………
    disp_edit_file(0);
//对文档的状态进行判断,当参数为1,3,9分别执行相应动作,其它参数则不执行动作
  ………………………………
  disp_edit_file(1);         //参数为1,返回”主机连接失败”
  ………………………………
  disp_edit_file(9);         //参数为9,返回”文件修改成功”
  ………………………………
}

void disp_edit_file(int type)
{………………………………
  printf("<script language="javascript"> ");
  printf("function thisform_OnSubmit() ");    
//修改文档后,按下“确定”按钮执行javascript脚本程序,保存修改后的文档
  printf("{ ");
  printf("   return confirm("保存修改后的文档吗?"); ");
  printf("} ");
  printf("</script> ");
  ………………………………
    if (type == 1)               //针对不同的type值返回不同的反馈信息
    printf("<p align="center"><strong><font color="#FF0000">主机连接失败!</font></strong></p> ");
  else if (type == 3)
    ………………………………
  else if (type == 9)
………………………………
}

关闭远程主机功能实现的关键代码如下:
void host_stop()
{
  if (get_form("stat") == NULL) {
    disp_host_control_hoststop();             //显示关闭主机界面
    return;
  }
  execlp("init", "init", "0", 0); //将execlp的第三个参数设置为0,远程关闭主机

重新启动远程主机功能实现的关键代码如下:
void host_restart()
{
  if (get_form("stat") == NULL) {
    disp_host_control_hostrestart();         //显示热启动主机界面
    return;
  }
  execlp("init", "init", "6", 0); //将execlp的第三个参数设置为6,重新启动系统
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值