第四次实验Word下载.docx

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

第四次实验Word下载.docx

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

第四次实验Word下载.docx

实验目的

熟悉:

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

•远程控制系统流程

实验环境

X86,WindowsXP,VMware5.0,RedHatLinux9.0

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

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

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

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

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

编写实验报告:

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

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

数据记录

和计算

TCP套接字编程(cont.):

工作原理:

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

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

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

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

程序源码:

tcpclient.c

#include<

stdio.h>

stdlib.h>

string.h>

sys/types.h>

sys/socket.h>

netinet/in.h>

#definePORT8900

#defineBUFSIZE2048

voidprintusage(char*command)

{

if(NULL==command)

exit(-1);

fprintf(stderr,"

theuseageof%s:

"

command);

%sIPADDR\n"

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"

);

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)))

connecterror\n"

close(sockfd);

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"

exit(0);

=(recvnum=read(sockfd,recvbuf,BUFSIZE)))

readerror\n"

recvbuf[recvnum]='

theresult:

\n"

%s\n"

recvbuf);

tcpserver.c

intexecute(char*command,char*buf)

FILE*fp;

intcount;

charcommandbuf[2056];

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

commandorbufisempty\n"

count=0;

memset(commandbuf,0,2056);

strcat(commandbuf,"

sh-c"

strcat(commandbuf,command);

thecommandis%s\n"

commandbuf);

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

r"

)))

createpipeerror\n"

while((count<

2047)&

&

(EOF!

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

buf[count-1]='

returncount;

intmain()

intconn_sock;

intsendnum;

structsockaddr_inclient;

intopt;

intcnt;

/*Thefirststage:

INITILIZE*/

client,0,sizeof(client));

memset(sendbuf,0,BUFSIZE);

memset(recvbuf,0,BUFSIZE);

conn_sock=-1;

opt=SO_REUSEADDR;

/*Thesecondstage:

createlistensocket*/

setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&

opt,sizeof(opt));

/*Thethirdstage:

bindsocket*/

server.sin_addr.s_addr=htonl(INADDR_ANY);

server.sin_port=htons(PORT);

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

bindsocketerror\n"

/*Thefourthstage:

listensocket*/

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

listensocketerror\n"

/*Thefifthstage:

creatconnectsocket*/

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

client,&

length)))

threeshakehandserror\n"

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]='

thecommandis:

if(0==strcmp(recvbuf,"

fprintf(stderr,"

theclientisquit\n"

break;

if(1>

=(cnt=execute(recvbuf,sendbuf)))

sprintf(sendbuf,"

theinvalidcommand,pleasetryagain\n"

theresultis\n%s"

sendbuf);

=(sendnum=write(conn_sock,sendbuf,strlen(sendbuf))))

close(sockfd);

Makefile:

结论

(结果)

结果截图:

服务器端:

客户端:

小结

通过本实验,我掌握了:

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

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

指导老师评议

成绩评定:

指导教师签名:

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

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

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

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