利用流套接字实现一个简单的远程控制系统

时间:2020-09-16 10:04:08 浏览量:

XX 大 学 计 算 机 学 院、软 件 学 院 实 验 报 告 学号:
姓名:
专业:软件学院 班级:09 第 3 周 课程名称 信息安全产品开发实践  实验课时 1 实验项目 远程控制系统 实验时间 2013/9/27 实验目的   流套接字与数据报套接字回顾 远程控制系统流程 实验环境 X86,Windows7,VMware9.0,Red Hat Enterprise Linux 5.0  实验内容(算法、程序、步骤和方法) 利用流套接字实现一个简单的远程控制系统:
客户端输入“quit”,客户端程序与服务器端程序打印退出信息,终止程序的执行;

客户输入命令,客户端将命令通过流套接字发送给客户端,服务器执行收到的命令,并将结果发送到客户端显示;

如果没有客户输入的命令,服务器发送命令非法信息,并在客户端显示该条信息。

编写实验报告:
列出程序运行状态、截图、配文字说明;

独立完成,打印报告,报告语言为中文,不少于4页A4,封面上书写姓名、学号。

  (接上) 实验内容(算法、程序、步骤和方法) 修改代码:
编译 运行结果:
源代码: udpclient.c /* * ===================================================================================== * * Filename: udpclient.c * * Description: : This program is used to demostrate how to implement a udp rpc control server * * Version: 1.0 * Created: 2013骞?9鏈?5鏃?16鏃?6鍒?5绉? * Revision: none * Compiler: gcc * * Author: Gang liang * Organization: Computer Science College, Sichuan University * * ===================================================================================== */ #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8888 #define SIZE 2048 #include <stdlib.h> /* * === FUNCTION ====================================================================== * Name: print_useage * Description: * ===================================================================================== */ void print_usage (char* cmd ) { fprintf(stderr,“Usage:%s ip address\n“,cmd); } /* ----- end of function print_useage ----- */ /* * === FUNCTION ====================================================================== * Name: main * Description: * ===================================================================================== */ int main ( int argc, char *argv[] ) { int sockfd; struct sockaddr_in client; struct sockaddr_in server; int len; int port; int rvalue; char buffer[SIZE]; char cmd[10]; /* these two vars used to deal with cd command */ //char path[2028]; //init sockfd=-1; bzero(&client,sizeof(struct sockaddr)); bzero(&server,sizeof(struct sockaddr)); len=-1; rvalue=-1; port=PORT; memset(buffer,0,sizeof(buffer)); bzero(cmd,10); //bzero(path,2048); if (2!=argc) { print_usage(argv[0]); exit(-1); } //phrase 1: The creation of the socket sockfd=socket(AF_INET,SOCK_STREAM,0); if (-1==sockfd) { fprintf(stderr,“error in creating socket\n“); exit(-1); } //Communation with the server.Attention:Client should send data to the server first. //Set the destination's address server.sin_family=AF_INET; server.sin_addr.s_addr=inet_addr(argv[1]); server.sin_port=htons(port); if (-1==connect(sockfd,(struct sockaddr*)&server,sizeof(server))) { perror(“connect error\n“); close(sockfd); return -1; } while(1) { fprintf(stderr,“TCP>“); fgets(buffer,SIZE,stdin); rvalue=write(sockfd,buffer,strlen(buffer),0); if (0==strcmp(buffer,“quit\n“)||(0==strcmp(buffer,“QUIT\N“))) { fprintf(stderr,“quit...\n“); break; } if (0>rvalue) { fprintf(stderr,“error in receiving data\n“); continue; } sscanf(buffer,“%s“,cmd); if ((0==strcmp(“cd“,cmd))||(0==strcmp(“CD“,cmd))) continue; len=sizeof(struct sockaddr); rvalue=read(sockfd,buffer,SIZE,0); if (0<rvalue) { buffer[rvalue]='\0'; fprintf(stderr,“%s\n“,buffer); } else { continue; } } close(sockfd); return EXIT_SUCCESS; } /* ---------- end of function main ---------- */ Udpserver.c /* * ===================================================================================== * * Filename: udpserver.c * * Description: This program is used to demostrate how to implement a udp rpc server * * Version: 1.0 * Created: 2013骞?9鏈?4鏃?20鏃?9鍒?2绉? * Revision: none * Compiler: gcc * * Author: Gang Liang * Organization: Computer Science College, Sichuan Universtiy * * ===================================================================================== */ #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <unistd.h> #include <stdlib.h> #define PORT 8888 /*server port */ #define SIZE 2048 /* 2K BUFFER */ int exec (char* command,char* result) { FILE * in; int len; char c; len=0; bzero(result,sizeof(result)); in=popen(command,“r“); if (NULL==in) { fprintf(stderr,“error in create a pipe\n“); return -1; } while(((c=fgetc(in))!=EOF)&&(len<SIZE)) { result[len]=c; len++; } result[len]='\0'; pclose(in); if (0==len) { sprintf(result,“%s cannot execute\n“,command); } return len; } /* ----- end of function exec ----- */ /* * === FUNCTION ====================================================================== * Name: main * Description: * ===================================================================================== */ int main ( int argc, char *argv[] ) { int sockfd; /* socket */ struct sockaddr_in client; /* ip address of client */ struct sockaddr_in server; /* ip address of server */ int len; int port; int rvalue; char send_buf[SIZE]; /* the result of buffer */ char recv_buf[SIZE]; /* the command buffer */ char cmd[10]; /* these two var used to deal with cd command */ char path[2048]; int opt; int connected; //init sockfd=-1; bzero(&client,sizeof(struct sockaddr)); bzero(&server,sizeof(struct sockaddr)); len=-1; rvalue=-1; bzero(send_buf,SIZE); bzero(recv_buf,SIZE); port=PORT; bzero(cmd,10); bzero(path,2048); opt=SO_REUSEADDR; connected=-1; // phrase 1: create socket; sockfd=socket(AF_INET,SOCK_STREAM,0); /* generate the socket */ if (-1==sockfd) { fprintf(stderr,“error in creating socket\n“); exit(-1); } setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); //phrase 2: bind the socket server.sin_family=AF_INET; server.sin_port=htons(port); server.sin_addr.s_addr=htonl(INADDR_ANY); rvalue=bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr)); if (-1==rvalue) { fprintf(stderr,“error in binding socket\n“); close(sockfd); exit(-1); } //listen socket if (-1==listen(sockfd,10)) { perror(“listen socket error\n“); close(sockfd); return -1; } //phrase 3: communication with client.Attention:The client send message to server first,then the server //can send message to the client.Otherwise, server cannot konw about the client while(1) { len=sizeof(struct sockaddr); if (-1==(connected=accept(sockfd,(struct sockaddr*)&client,&len))) { perror(“three shakehands error\n“); close(sockfd); return -1; } while(1) { rvalue=read(connected,recv_buf,SIZE); if (0>rvalue) { fprintf(stderr,“error in receiving data\n“); continue; } recv_buf[rvalue-1]='\0'; if (0==strcmp(recv_buf,“quit“)) { fprintf(stderr,“the client is quit\n“); close(connected); break; } sscanf(recv_buf,“%s %s“,cmd,path); if ((0==strcmp(“cd“,cmd)) ||(0==strcmp(“CD“,cmd))) { chdir(path); continue; } fprintf(stderr,“the result is \n%s“,send_buf); exec(recv_buf,send_buf); rvalue=-1; rvalue=write(connected,send_buf,strlen(send_buf)); if (0>rvalue) { fprintf(stderr,“error in sending data\n“); continue; } } close(connected); } //phrase 4:release the socket close(sockfd); return EXIT_SUCCESS; } /* ---------- end of function main ---------- */ 数据记录 和计算   TCP套接字编程(cont.):
工作原理:
• 客户端接收用户输入的命令,客户端通过套接字将命令传送给服务器端, • 服务器在收到用户的命令,对命令进行解析 • 在服务器端调用对应的命令 • 并将命令执行的结果发送给客户端,从而实现远距离控制的功能。

结 论 (结 果)   功过修改代码成功使用TCP实现远程控制。

小 结   通过本实验,我掌握了:
利用流套接字实现一个简单的远程控制系统,熟悉了流套接字与数据报套接字编程。

自己能做一个简单的远程控制系统流程 指导老师评 议   成绩评定:
指导教师签名:

推荐访问:控制系统 利用 简单

《利用流套接字实现一个简单的远程控制系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:

文档为doc格式

一键复制全文 下载 投诉