第四次实验.docx

上传人:b****3 文档编号:4593891 上传时间:2022-12-07 格式:DOCX 页数:12 大小:83.40KB
下载 相关 举报
第四次实验.docx_第1页
第1页 / 共12页
第四次实验.docx_第2页
第2页 / 共12页
第四次实验.docx_第3页
第3页 / 共12页
第四次实验.docx_第4页
第4页 / 共12页
第四次实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

第四次实验.docx

《第四次实验.docx》由会员分享,可在线阅读,更多相关《第四次实验.docx(12页珍藏版)》请在冰豆网上搜索。

第四次实验.docx

第四次实验

软件学院

信息安全产品开发实践实验四报告

陈枝-1043111034

2012-09-30

四川大学计算机学院、软件学院

实验报告

学号:

_1043111034_姓名:

_陈枝_专业:

_软件工程_班级:

_3班_第四周

课程名称

 信息安全产品开发实践

实验课时

1

实验项目

远程控制系统

实验时间

第四周

2012年9月27日星期五

2012年9月30日星期天

实验目的

熟悉:

•流套接字与数据报套接字回顾

•远程控制系统流程

实验环境

 X86,WindowsXP,VMware5.0,RedHatLinux9.0

实验内容(算法、程序、步骤和方法)

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

1.客户端输入“quit”,客户端程序与服务器端程序打印退出信息,终止程序的执行;

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

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

编写实验报告:

1.列出程序运行状态、截图、配文字说明;

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

数据记录

和计算

TCP套接字编程(cont.):

 

工作原理:

•客户端接收用户输入的命令,客户端通过套接字将命令传送给服务器端,

•服务器在收到用户的命令,对命令进行解析

•在服务器端调用对应的命令

并将命令执行的结果发送给客户端,从而实现远距离控制的功能。

 

程序源码:

tcpclient.c

#include

#include

#include

#include

#include

#include

#definePORT8900

#defineBUFSIZE2048

voidprintusage(char*command)

{

if(NULL==command)

exit(-1);

fprintf(stderr,"theuseageof%s:

",command);

fprintf(stderr,"%sIPADDR\n",command);

return;

}

intmain(intargc,char**argv)

{

intsockfd;

intlength;

structsockaddr_inserver;

intsndnum;

intrecvnum;

charsendbuf[BUFSIZE];

charrecvbuf[BUFSIZE];

sockfd=-1;

length=0;

if(2!

=argc)

{

printusage(argv[0]);

return-1;

}

if(-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))

{

perror("createsocketerror\n");

return-1;

}

memset(&server,0,sizeof(server));

server.sin_family=AF_INET;

server.sin_addr.s_addr=inet_addr(argv[1]);

server.sin_port=htons(PORT);

if(-1==connect(sockfd,(structsockaddr*)&server,sizeof(server)))

{

perror("connecterror\n");

close(sockfd);

return-1;

}

while

(1)

{

fprintf(stderr,"TCP>");

memset(recvbuf,0,BUFSIZE);

memset(sendbuf,0,BUFSIZE);

fgets(sendbuf,BUFSIZE,stdin);

length=strlen(sendbuf);

sendbuf[length-1]='\0';

if(0>=(sndnum=write(sockfd,sendbuf,strlen(sendbuf))))

{

perror("senderror\n");

close(sockfd);

exit(-1);

}

if(0==strcmp(sendbuf,"quit"))

{

fprintf(stderr,"quit...\n");

close(sockfd);

exit(0);

}

if(0>=(recvnum=read(sockfd,recvbuf,BUFSIZE)))

{

perror("readerror\n");

close(sockfd);

exit(-1);

}

recvbuf[recvnum]='\0';

fprintf(stderr,"theresult:

\n");

fprintf(stderr,"%s\n",recvbuf);

}

}

tcpserver.c

#include

#include

#include

#include

#include

#include

#definePORT8900

#defineBUFSIZE2048

intexecute(char*command,char*buf)

{

FILE*fp;

intcount;

charcommandbuf[2056];

if((NULL==command)||(NULL==buf))

{

perror("commandorbufisempty\n");

return-1;

}

count=0;

memset(commandbuf,0,2056);

strcat(commandbuf,"sh-c");

strcat(commandbuf,command);

fprintf(stderr,"thecommandis%s\n",commandbuf);

if(NULL==(fp=popen(commandbuf,"r")))

{

perror("createpipeerror\n");

return-1;

}

while((count<2047)&&(EOF!

=(buf[count++]=fgetc(fp))));

buf[count-1]='\0';

returncount;

}

intmain()

{

intsockfd;

intconn_sock;

charsendbuf[BUFSIZE];

charrecvbuf[BUFSIZE];

intsendnum;

intrecvnum;

intlength;

structsockaddr_inclient;

structsockaddr_inserver;

intopt;

intcnt;

/*Thefirststage:

INITILIZE*/

memset(&client,0,sizeof(client));

memset(&server,0,sizeof(server));

memset(sendbuf,0,BUFSIZE);

memset(recvbuf,0,BUFSIZE);

length=0;

sockfd=-1;

conn_sock=-1;

opt=SO_REUSEADDR;

/*Thesecondstage:

createlistensocket*/

if(-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))

{

perror("createsocketerror\n");

return-1;

}

setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

/*Thethirdstage:

bindsocket*/

server.sin_family=AF_INET;

server.sin_addr.s_addr=htonl(INADDR_ANY);

server.sin_port=htons(PORT);

if(-1==bind(sockfd,(structsockaddr*)&server,sizeof(server)))

{

perror("bindsocketerror\n");

close(sockfd);

return-1;

}

/*Thefourthstage:

listensocket*/

if(-1==listen(sockfd,10))

{

perror("listensocketerror\n");

close(sockfd);

return-1;

}

/*Thefifthstage:

creatconnectsocket*/

while

(1)

{

if(-1==(conn_sock=accept(sockfd,(structsockaddr*)&client,&length)))

{

perror("threeshakehandserror\n");

close(sockfd);

return-1;

}

/*thecommnicationwithclient*/

while

(1)

{

memset(recvbuf,0,BUFSIZE);

memset(sendbuf,0,BUFSIZE);

if(0>=(recvnum=read(conn_sock,recvbuf,BUFSIZE)))

{

perror("thecommucationerror\n");

close(conn_sock);

close(sockfd);

return-1;

}

recvbuf[recvnum]='\0';

fprintf(stderr,"thecommandis:

%s\n",recvbuf);

if(0==strcmp(recvbuf,"quit"))

{

fprintf(stderr,"theclientisquit\n");

close(conn_sock);

break;

}

if(1>=(cnt=execute(recvbuf,sendbuf)))

{

sprintf(sendbuf,"theinvalidcommand,pleasetryagain\n");

}

fprintf(stderr,"theresultis\n%s",sendbuf);

if(0>=(sendnum=write(conn_sock,sendbuf,strlen(sendbuf))))

{

perror("thecommucationerror\n");

close(sockfd);

close(conn_sock);

return-1;

}

}

}

close(sockfd);

}

Makefile:

结论

(结果)

结果截图:

服务器端:

客户端:

小结

通过本实验,我掌握了:

利用流套接字实现一个简单的远程控制系统,熟悉了流套接字与数据报套接字编程。

自己能做一个简单的远程控制系统流程。

指导老师评议

 

 

成绩评定:

指导教师签名:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1