利用流套接字实现一个简单的远程控制系统
利用流套接字实现一个简单的远程控制系统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 #include #include #include #include #define PORT 8888 #define SIZE 2048 #include /* * = FUNCTION = * Name: print_useage * Description: * = */ void print_usage (char* cmd ) fprintf(stderr,“Usage:%s ip addressn“,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 bufferSIZE; char cmd10; /* these two vars used to deal with cd command */ /char path2028; /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(argv0); exit(-1); /phrase 1: The creation of the socket sockfd=socket(AF_INET,SOCK_STREAM,0); if (-1=sockfd) fprintf(stderr,“error in creating socketn“); exit(-1); /Communation with the server.Attention:Client should send data to the server first. /Set the destinations address server.sin_family=AF_INET; server.sin_addr.s_addr=inet_addr(argv1); server.sin_port=htons(port); if (-1=connect(sockfd,(struct sockaddr*)&server,sizeof(server) perror(“connect errorn“); close(sockfd); return -1; while(1) fprintf(stderr,“TCP>“); fgets(buffer,SIZE,stdin); rvalue=write(sockfd,buffer,strlen(buffer),0); if (0=strcmp(buffer,“quitn“)|(0=strcmp(buffer,“QUITN“) fprintf(stderr,“quit.n“); break; if (0>rvalue) fprintf(stderr,“error in receiving datan“); 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 #include #include #include #include #include #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 pipen“); return -1; while(c=fgetc(in)!=EOF)&&(lenrvalue) fprintf(stderr,“error in receiving datan“); continue; recv_bufrvalue-1=0; if (0=strcmp(recv_buf,“quit“) fprintf(stderr,“the client is quitn“); 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 datan“); continue; close(connected); /phrase 4:release the socket close(sockfd); return EXIT_SUCCESS; /* - end of function main - */ 数据记录 和计算 TCP套接字编程(cont.): 工作原理: 客户端接收用户输入的命令,客户端通过套接字将命令传送给服务器端, 服务器在收到用户的命令,对命令进行解析 在服务器端调用对应的命令 并将命令执行的结果发送给客户端,从而实现远距离控制的功能。 结 论 (结 果) 功过修改代码成功使用TCP实现远程控制。 小 结 通过本实验,我掌握了: 利用流套接字实现一个简单的远程控制系统,熟悉了流套接字与数据报套接字编程。 自己能做一个简单的远程控制系统流程 指导老师评 议 成绩评定: 指导教师签名: