ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:126.65KB ,
资源ID:9750821      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9750821.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络程序设计上机考题目.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络程序设计上机考题目.docx

1、网络程序设计上机考题目网络程序设计实验报告 学号: 031003102 姓名: 陈秋菊 年级: 2010级 学院: 数计学院 专业: 信息安全 实验时间:2012.12.17 任课教师:张浩6 实验六 网络聊天软件的设计与实现20126.1 实验目的综合运用所学知识,设计并实现局域网内聊天软件。6.2 实验原理(1)UDP套接口编程原理:UDP进程通信时不需要客户与服务器进行建立连接,使用了sendto函数给服务器发送数据报,参数必须指定目的地的地址;服务器不接受来自客户的连接,调用recvfrom函数,等待来自某个客户的数据到达recvfrom所接收的数据报以及客户的协议地址,一同返回给客户

2、进程,服务器根据返回地址,把响应发给相应的客户。(2)多路复用 内核发现进程指定的一个或多个I/O条件就绪,就通知进程:这种方式称为多路复用调用select/poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在I/O系统调用上,阻塞于select调用,等待数据报套接口变为可读。当select返回套接口可读时,调用recvfrom把所读数据报拷贝到应用进程缓冲区,其优势在于可以等待多个描述字的就绪。(3)信号驱动I/O模型:内核在描述字就绪时,发送SIGIO信号通知进程:6.3 实验仪器(硬件设备与软件)(1) PC 机(已安装Windows 操作系统);(2) Linux 操作系统软件(

3、RedHat)或者VMware 已安装的系统文件包;(3) VMware 软件和SSH 客户端软件(SSH Secure Shell)。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个

4、窗口的代码一样,唯一不同的是其端口号不一样。int ret,n;fd_set fds;#define BUFFSIZE 1024char buffBUFFSIZE;struct sockaddr_in remote;int len;while(1)FD_ZERO(&fds);FD_SET(sock,&fds);FD_SET(1,&fds);ret=select(sock+1,&fds,NULL,NULL,NULL);if(ret0)perror(select:);return -1;if(ret)if(FD_ISSET(sock,&fds)bzero(buff,BUFFSIZE);n=recv

5、from(sock,buff,BUFFSIZE,0,(struct sockaddr*)&remote,&len);buffn=0;printf(recv:%sn,buff);/printf(recv from:%snmsg:%sn,inet_ntoa(remote.sin_addr),buff);/sock /retif(FD_ISSET(1,&fds)if(FD_ISSET(sock,&fds)bzero(buff,BUFFSIZE);n=recvfrom(sock,buff,BUFFSIZE,0,(struct sockaddr*)&remote,&len);buffn=0;printf

6、(recv:%sn,buff);/printf(recv from:%snmsg:%sn,inet_ntoa(remote.sin_addr),buff);/sockbzero(buff,BUFFSIZE);fgets(buff,BUFFSIZE,stdin);if(sendto(sock,buff,strlen(buff),0,(struct sockaddr*)&to,sizeof(to)0)perror(sendto:);return -1;printf(send:%sn,buff); /stdin/whilereturn 0;端口3333发送时运行结果:端口3334接收时运行结果:端口

7、3334发送时运行结果:端口3333接收时运行结果:1 对多 信息交互: 在第一题的基础上加上设置目标的功能,通过按终端键CTRL+C向程序发送SIGINT信号,用来设置目标地址信息,让信息可以发送到指定地址。按下CTRL+C后进入命令模式,输入“set 目标ip 目标端口”可以设置目标地址信息,当设置好目标地址信息后,就可以与其进行通信,每个进程都在侦听端口,当侦听到某个端口发来消息时,就与其进行通信,当输入“exit”时退出程序。char fun20,ip20,p20;struct sockaddr_in target;void sig_intr(int signo)printf(use

8、set ip port to set targetn);printf(use exit to quitn);bzero(fun,20);scanf(%s,fun);if(strcmp(fun,exit)=0)exit(0);else if(strcmp(fun,set)=0)bzero(ip,20);bzero(p,20);scanf(%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

9、);printf(Set target to %s:%sn,ip,p);elseprintf(invalid function:%sn,fun);getchar();其余的代码和第一题的一样。实验结果如图:端口3333的运行结果(包括发送与接收):端口3334的运行结果(包括发送与接收):端口3335的运行结果(包括发送与接收):组内信息交互代码:采用IP多播实现,主要代码如下:int main(int argc,char *argv)/*if(argc!=4)printf(Usage:%s local_ip group_ip portn,argv0);return -1;*/int sock

10、fd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd0)perror(socket:);return -1;int reuse=1;if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char *)&reuse,sizeof(reuse)0)perror(setsockopt);return -1;struct sockaddr_in sin;memset(&sin,0,sizeof(sin);sin.sin_family=AF_INET;sin.sin_port=htons(3127);sin.sin_addr.s_add

11、r=INADDR_ANY;struct sockaddr_in to;memset(&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,(struct sockaddr*)&sin,sizeof(sin)0)perror(bind:);return -1;struct ip_mreq mcast;memset(&mcast,0,sizeof(mcast);mcast.imr_multiaddr.s_addr=in

12、et_addr(225.0.0.1);mcast.imr_interface.s_addr=INADDR_ANY;if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *)&mcast,sizeof(mcast)0)perror(setsockopt:);return -1;#define BUFFSIZE 1024char buffBUFFSIZE;int n,ret;struct sockaddr_in remote;int len;fd_set fds;while(1)FD_ZERO(&fds);FD_SET(sockfd,&fd

13、s);FD_SET(1,&fds);ret=select(sockfd+1,&fds,NULL,NULL,NULL);if(ret0)perror(select:);return -1;if(ret)if(FD_ISSET(sockfd,&fds)bzero(buff,BUFFSIZE);n=recvfrom(sockfd,buff,BUFFSIZE,0,(struct sockaddr*)&remote,&len);buffn=0; printf(%s said:%sn,inet_ntoa(remote.sin_addr),buff);/sock /ret if(FD_ISSET(1,&fd

14、s)if(FD_ISSET(sockfd,&fds)bzero(buff,BUFFSIZE);n=recvfrom(sockfd,buff,BUFFSIZE,0,(struct sockaddr*)&remote,&len);buffn=0;printf(%s said:%sn,inet_ntoa(remote.sin_addr),buff);/sock fgets(buff,BUFFSIZE,stdin); if(sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&to,sizeof(to)0)perror(sendto:);return

15、 -1;printf(I said:%sn,buff); /stdin/whilereturn 0;实验结果截图如下:SSH端口首先发送然后又接收消息:另一个SSH端口先收到然后在发送:6.5实验总结与心得 通过前面几次实验的基础,经过仔细的思考,再三的实验,终于把1对1的交互大体弄出来,虽然还是有一点点不对,不过已经尽力了,本次实验将前面所做实验综合起来,利用前面所学的知识来进行进程之间的即时通信,本实验中第一题采用多路复用实现,可以通过不同的协议来完成,实验结果是双方都可以即时通信,类似于QQ等聊天工具。 第二题中是一对多的通信,具体实现是在第一题的基础上,添加设置目标地址的信息,调用si

16、g_intr函数想系统内核发送信号,通知进程就绪准备好,然后进行1对多的即时通信,因为自己的能力有限,不能自己独立做出来,参考了别人的代码,虽然自己有一直才编写程序,可是总是有很多很多错误,请教同学也没有改出来,上网搜索也没有完全解决错误,不过参考别人的代码也是有很多收获的,这让我对信号函数的功能以及实用范围之广有了更深一层的了解。 第三题组内的通信,采用多播技术,通过加入多播组,将信息发送给多播组是,多播组中的每一位组内成员都可以收到发来的信息,这个代码也是参考别人的,虽然不是很理解,不过,通过自己试着去理解,对于多播的作用以及重要性,多播的功能等理论性的知识有了更深刻的认识,巩固了之前理论课所学的多播的知识,以及它与其他方式之间的差异。

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

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