- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络程序设计上机考题目
《网络程序设计》实验报告
学号: 031003102
姓名: 陈秋菊
年级: 2010级
学院: 数计学院
专业: 信息安全
实验时间:2012.12.17
任课教师:张浩
6 实验六 网络聊天软件的设计与实现2012
6.1 实验目的
综合运用所学知识,设计并实现局域网内聊天软件。
6.2 实验原理
(1)UDP套接口编程原理:
UDP进程通信时不需要客户与服务器进行建立连接,使用了sendto函数给服务器发送数据报,参数必须指定目的地的地址;
服务器不接受来自客户的连接,调用recvfrom函数,等待来自某个客户的数据到达recvfrom所接收的数据报以及客户的协议地址,一同返回给客户进程,服务器根据返回地址,把响应发给相应的客户。
多路复用
内核发现进程指定的一个或多个I/O条件就绪,就通知进程:这种方式称为多路复用
调用select/poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在I/O系统调用上,阻塞于select调用,等待数据报套接口变为可读。当select返回套接口可读时,调用recvfrom把所读数据报拷贝到应用进程缓冲区,其优势在于可以等待多个描述字的就绪。
信号驱动I/O模型:
内核在描述字就绪时,发送SIGIO信号通知进程:
6.3 实验仪器(硬件设备与软件)
(1) PC 机(已安装Windows 操作系统);
(2) Linux 操作系统软件(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个窗口的代码一样,唯一不同的是其端口号不一样。
int ret,n;
fd_set fds;
#define BUFFSIZE 1024
char buff[BUFFSIZE];
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=recvfrom(sock,buff,BUFFSIZE,0,(struct sockaddr*)remote,len);
buff[n]=0;
printf(recv:%s\n,buff);
//printf(recv from:%s\nmsg:%s\n,inet_ntoa(remote.sin_addr),buff);
}//sock
} //ret
if(FD_ISSET(1,fds))
{
if(FD_ISSET(sock,fds))
{
bzero(buff,BUFFSIZE);
n=recvfrom(sock,buff,BUFFSIZE,0,(struct sockaddr*)remote,len);
buff[n]=0;
printf(recv:%s\n,buff);
//printf(recv from:%s\nmsg:%s\n,inet_ntoa(remote.sin_addr),buff);
}//sock
bzero(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:%s\n,buff);
} //stdin
}//while
return 0;
}
端口3333发送时运行结果:
端口3334接收时运行结果:
端口3334发送时运行结果:
端口3333接收时运行结果
您可能关注的文档
最近下载
- 建筑工程图集 19DX101-1:建筑电气常用数据.pdf VIP
- 六年级上册语文一课一练-11故宫博物院含答案.pdf VIP
- 小学体育水平一《爬越一定高度的高障碍物》教学设计.doc VIP
- 迈迪工具箱-齿轮设计教程(详细).pptx
- 2025-2026学年湘美版四年级上册书法全册教学教案(教学设计).pdf VIP
- 第二章 课程与教学研究的历史发展.ppt VIP
- 2024年3月青少年机器人技术等级考试理论综合试卷二级真题及答案.docx VIP
- 2024浙江杭州市能源集团有限公司招聘6人笔试参考题库附带答案详解.pdf
- 《传统木工工具》精美课件.pptx VIP
- 面粉厂事故应急救援预案.docx VIP
文档评论(0)