网络程序设计上机考题目Word文档下载推荐.docx

上传人:b****1 文档编号:5260364 上传时间:2023-05-04 格式:DOCX 页数:14 大小:126.65KB
下载 相关 举报
网络程序设计上机考题目Word文档下载推荐.docx_第1页
第1页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第2页
第2页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第3页
第3页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第4页
第4页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第5页
第5页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第6页
第6页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第7页
第7页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第8页
第8页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第9页
第9页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第10页
第10页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第11页
第11页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第12页
第12页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第13页
第13页 / 共14页
网络程序设计上机考题目Word文档下载推荐.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

网络程序设计上机考题目Word文档下载推荐.docx

《网络程序设计上机考题目Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络程序设计上机考题目Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。

网络程序设计上机考题目Word文档下载推荐.docx

6.1实验目的

综合运用所学知识,设计并实现局域网内聊天软件。

6.2实验原理

(1)UDP套接口编程原理:

UDP进程通信时不需要客户与服务器进行建立连接,使用了sendto函数给服务器发送数据报,参数必须指定目的地的地址;

服务器不接受来自客户的连接,调用recvfrom函数,等待来自某个客户的数据到达recvfrom所接收的数据报以及客户的协议地址,一同返回给客户进程,服务器根据返回地址,把响应发给相应的客户。

(2)多路复用

内核发现进程指定的一个或多个I/O条件就绪,就通知进程:

这种方式称为多路复用

调用select/poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在I/O系统调用上,阻塞于select调用,等待数据报套接口变为可读。

当select返回套接口可读时,调用recvfrom把所读数据报拷贝到应用进程缓冲区,其优势在于可以等待多个描述字的就绪。

(3)信号驱动I/O模型:

内核在描述字就绪时,发送SIGIO信号通知进程:

6.3实验仪器(硬件设备与软件)

(1)PC机(已安装Windows操作系统);

(2)Linux操作系统软件(RedHat)或者VMware已安装的系统文件包;

(3)VMware软件和SSH客户端软件(SSHSecureShell)。

6.4实验内容与步骤

6.4.1上机测试部分

要求:

使用套接口编程(TCP或UDP协议自选),实现通信双方的文字交流。

1.通信双方均可随时收发信息:

1对1信息交互

2.一方可同时与多方进行信息交流:

1对多信息交互

3.分组内多方信息交流:

组内信息交互

4.协议不限(TCP或者UDP)、可采用多路复用、信号驱动IO、多播等技术

6.4.2实验代码以及结果显示

1对1信息交互的代码:

选择UDP协议,采用select函数多路复用的方式实现。

SSH2个窗口的代码一样,唯一不同的是其端口号不一样。

intret,n;

fd_setfds;

#defineBUFFSIZE1024

charbuff[BUFFSIZE];

structsockaddr_inremote;

intlen;

while

(1)

{

FD_ZERO(&

fds);

FD_SET(sock,&

FD_SET(1,&

ret=select(sock+1,&

fds,NULL,NULL,NULL);

if(ret<

0)

perror("

select:

"

);

return-1;

}

if(ret)

if(FD_ISSET(sock,&

fds))

bzero(buff,BUFFSIZE);

n=recvfrom(sock,buff,BUFFSIZE,0,(structsockaddr*)&

remote,&

len);

buff[n]=0;

printf("

recv:

%s\n"

buff);

//printf("

recvfrom:

%s\nmsg:

inet_ntoa(remote.sin_addr),buff);

}//sock

}//ret

if(FD_ISSET(1,&

fgets(buff,BUFFSIZE,stdin);

if(sendto(sock,buff,strlen(buff),0,(structsockaddr*)&

to,sizeof(to))<

sendto:

send:

}//stdin

}//while

return0;

端口3333发送时运行结果:

端口3334接收时运行结果:

端口3334发送时运行结果:

端口3333接收时运行结果:

1对多信息交互:

在第一题的基础上加上设置目标的功能,通过按终端键CTRL+C向程序发送SIGINT信号,用来设置目标地址信息,让信息可以发送到指定地址。

按下CTRL+C后进入命令模式,输入“set目标ip目标端口”可以设置目标地址信息,当设置好目标地址信息后,就可以与其进行通信,每个进程都在侦听端口,当侦听到某个端口发来消息时,就与其进行通信,当输入“exit”时退出程序。

charfun[20],ip[20],p[20];

structsockaddr_intarget;

voidsig_intr(intsigno)

use'

setipport'

tosettarget\n"

exit'

toquit\n"

bzero(fun,20);

scanf("

%s"

fun);

if(strcmp(fun,"

exit"

)==0)

exit(0);

elseif(strcmp(fun,"

set"

bzero(ip,20);

bzero(p,20);

%s%s"

ip,p);

bzero(&

target,sizeof(target));

target.sin_family=AF_INET;

target.sin_port=htons(atoi(p));

target.sin_addr.s_addr=inet_addr(ip);

Settargetto%s:

else

invalidfunction:

getchar();

其余的代码和第一题的一样。

实验结果如图:

端口3333的运行结果(包括发送与接收):

端口3334的运行结果(包括发送与接收):

端口3335的运行结果(包括发送与接收):

组内信息交互代码:

采用IP多播实现,主要代码如下:

intmain(intargc,char**argv)

/*

if(argc!

=4)

Usage:

%slocal_ipgroup_ipport\n"

argv[0]);

}*/

intsockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd<

{perror("

socket:

intreuse=1;

if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&

reuse,sizeof(reuse))<

setsockopt"

structsockaddr_insin;

memset(&

sin,0,sizeof(sin));

sin.sin_family=AF_INET;

sin.sin_port=htons(3127);

sin.sin_addr.s_addr=INADDR_ANY;

structsockaddr_into;

to,0,sizeof(to));

to.sin_family=AF_INET;

to.sin_port=htons(3127);

to.sin_addr.s_addr=inet_addr("

225.0.0.1"

if(bind(sockfd,(structsockaddr*)&

sin,sizeof(sin))<

bind:

structip_mreqmcast;

mcast,0,sizeof(mcast));

mcast.imr_multiaddr.s_addr=inet_addr("

mcast.imr_interface.s_addr=INADDR_ANY;

if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&

mcast,sizeof(mcast))<

setsockopt:

intn,ret;

FD_SET(sockfd,&

ret=select(sockfd+1,&

if(FD_ISSET(sockfd,&

n=recvfrom(sockfd,buff,BUFFSIZE,0,(structsockaddr*)&

[%s]said:

if(sendto(sockfd,buff,strlen(buff),0,(structsockaddr*)&

Isaid:

实验结果截图如下:

SSH端口首先发送然后又接收消息:

另一个SSH端口先收到然后在发送:

6.5实验总结与心得

通过前面几次实验的基础,经过仔细的思考,再三的实验,终于把1对1的交互大体弄出来,虽然还是有一点点不对,不过已经尽力了,本次实验将前面所做实验综合起来,利用前面所学的知识来进行进程之间的即时通信,本实验中第一题采用多路复用实现,可以通过不同的协议来完成,实验结果是双方都可以即时通信,类似于QQ等聊天工具。

第二题中是一对多的通信,具体实现是在第一题的基础上,添加设置目标地址的信息,调用sig_intr函数想系统内核发送信号,通知进程就绪准备好,然后进行1对多的即时通信,因为自己的能力有限,不能自己独立做出来,参考了别人的代码,虽然自己有一直才编写程序,可是总是有很多很多错误,请教同学也没有改出来,上网搜索也没有完全解决错误,不过参考别人的代码也是有很多收获的,这让我对信号函数的功能以及实用范围之广有了更深一层的了解。

第三题组内的通信,采用多播技术,通过加入多播组,将信息发送给多播组是,多播组中的每一位组内成员都可以收到发来的信息,这个代码也是参考别人的,虽然不是很理解,不过,通过自己试着去理解,对于多播的作用以及重要性,多播的功能等理论性的知识有了更深刻的认识,巩固了之前理论课所学的多播的知识,以及它与其他方式之间的差异。

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2