版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 学号: 姓名:专业: 班级: 第 3 周 课程名称 信息安全产品开发实践 实验课时4实验项目远程控制系统实验时间2013.9.27实验目的 利用流套接字实现一个简单的远程控制系统 实验环境 虚拟机 Ubuntu-VMware Workstation 实验内容(算法、程序、步骤和方法) 服务器服务器代码中有两个死循环,外部是为了重复连接客户端(即使对方断了此次连接仍然能继续等待并连接下一客户端),要注意每连接一次客户端套接字都会不同,而且除了连接客户端的套接字以外还有监听套接字。#include
2、<stdlib.h>#include<stdio.h>#include<sys/socket.h>#include<netdb.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#define PORT 8900#defineSIZE 2048/* 2K BUFFER */void exec (char* command,char* result)FILE * in;int len;cha
3、r 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)&&(len<SIZE)resultlen=c;len+;resultlen='0'pclose(in);if (0=len)sprintf(result,"%s cannot executen",comm
4、and);int main(int argc,char* argv)struct sockaddr_in server;struct sockaddr_in client;int len;int port;int listend;int connectd;int sendnum;int opt;int recvnum;char send_buf2048;char recv_buf2048;int rvalue;char cmd10; /* these two var used to deal with cd command */char path2048;port= PORT;memset(s
5、end_buf,0,2048);memset(recv_buf,0,2048);opt = SO_REUSEADDR;if (-1=(listend=socket(AF_INET,SOCK_STREAM,0)/使用TCP创建监听用的套接字perror("create listen socket errorn");exit(1);setsockopt(listend,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt);#ifdef DEBUGprintf("the listen id is %dn",listend);
6、#endifmemset(&server,0,sizeof(struct sockaddr_in);server.sin_family = AF_INET;/IPv4协议server.sin_addr.s_addr = htonl(INADDR_ANY);/接收任意地址server.sin_port = htons(port);/设置端口号if (-1=bind(listend,(struct sockaddr *)&server,sizeof(struct sockaddr)/绑定perror("bind errorn");exit(1); if (-1=
7、listen(listend,5) perror("listen errorn");exit(1); while(1)/外部死循环,用来重复连接客户端if (-1=(connectd=accept(listend,(struct sockaddr*)&client,&len)/创建新的套接字连接客户端perror("create connect socket errorn");continue;while (1)memset(recv_buf,0,2048);#ifdef DEBUGprintf("the connect id
8、is %d",connect);printf("the client ip addr is %s",inet_ntoa(client.sin_addr);#endif#ifdef DEBUGprintf("the send num is %d",sendnum);printf("the client ip addr is %s",inet_ntoa(client.sin_addr);#endifif (0>(recvnum = recv(connectd,recv_buf,sizeof(recv_buf),0)perr
9、or("recv errorn");close(connectd);continue;recv_bufrecvnum-1='0'/这里要注意-1,不然会保留换行符if (0=strcmp(recv_buf,"quit")|(0=strcmp(recv_buf,"QUIT")/结束对话,跳出内部循环,继续外部循环printf("overn");break;sscanf(recv_buf,"%s %s",cmd,path);if (0=strcmp("cd",cm
10、d) |(0=strcmp("CD",cmd)chdir(path);continue;exec(recv_buf,send_buf);rvalue=-1;rvalue=send(connectd,send_buf,sizeof(send_buf),0); close(listend); return 0; (接上)实验内容(算法、程序、步骤和方法)客户端客户端代码中只有一个死循环,和上次实验差别不大。#include<stdlib.h>#include<stdio.h>#include<sys/socket.h>#inclu
11、de<netdb.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#define SIZE 2048void print_usage (char* cmd )fprintf(stderr,"Usage:%s ip addressn",cmd);int main(int argc,char* argv)struct sockaddr_in server;int ret;int len;int port;i
12、nt sockfd;int sendnum;int recvnum;char send_buf2048;char recv_buf2048;int rvalue;char bufferSIZE;char cmd10; if (2>argc)| (argc >3)print_usage(argv0);exit(1);if (3=argc) /这里的端口号从主函数参数获取port = atoi(argv2);if (-1=(sockfd=socket(AF_INET,SOCK_STREAM,0)perror("can not create socketn");exi
13、t(1);memset(&server,0,sizeof(struct sockaddr_in);server.sin_family = AF_INET;server.sin_addr.s_addr = inet_addr(argv1);server.sin_port = htons(port);if (0>(ret=connect(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr)perror("connect error");close(sockfd);exit(1);while(1)/
14、这边只需一个死循环memset(buffer,0,2048);fprintf(stderr,"TCP>");fgets(buffer,SIZE,stdin);rvalue=send(sockfd,buffer,strlen(buffer),0);if (0=strcmp(buffer,"quitn")|(0=strcmp(buffer,"QUITn")/结束对话close(sockfd);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;/如果是cd命令则没有返回内容直接重新开始循环len=sizeof(struct sockaddr);if (0>(len=recv(sockfd,buffer,2048,0)perror("recv data errorn");close(sockfd);exit(1);bufferlen='0'printf(&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招标文件中的运输说明
- 增长的算法-空手
- 2024年九年级化学上册 第二单元 课题1 空气教案 (新版)新人教版
- 2024-2025学年高中数学 第一章 预备知识 4 一元二次函数与一元二次不等式 1.4.3 一元二次不等式的应用教案 北师大版必修第一册
- 2023六年级英语下册 Unit 8 What′s Your Dream第4课时教案 陕旅版(三起)
- 2024-2025学年新教材高中历史 第一单元 古代文明的产生与发展 第1课 文明的产生与早期发展教学教案 新人教版必修《中外历史纲要(下)》
- 八年级物理上册 4.2《探究汽化和液化的特点》教学设计 (新版)粤教沪版
- 2024-2025学年高中历史下学期第1周 新中国初期的外交教学设计
- 易制爆化学品库管员职责
- 钻井纠斜技术服务合同(2篇)
- 大一基础化学复习题
- 增值税专用发票清单模板
- 第一讲-视频拍摄入门(上)PPT优秀课件
- 办公室搬迁合同
- 北京电影学院ppt讲义.doc
- 乱世巨星谐音歌词.
- 部队保密工作心得体会最新三篇
- 硬笔书法练习米字格田字格(A4纸)word打印版
- 高温合金PPT课件
- 《药物过敏反应抢救流程》
- 毕业论文deform模拟坯料在旋转锻造中的应力变形
评论
0/150
提交评论