江苏大学接口实验报告.docx

上传人:b****1 文档编号:14704406 上传时间:2023-06-26 格式:DOCX 页数:19 大小:722.03KB
下载 相关 举报
江苏大学接口实验报告.docx_第1页
第1页 / 共19页
江苏大学接口实验报告.docx_第2页
第2页 / 共19页
江苏大学接口实验报告.docx_第3页
第3页 / 共19页
江苏大学接口实验报告.docx_第4页
第4页 / 共19页
江苏大学接口实验报告.docx_第5页
第5页 / 共19页
江苏大学接口实验报告.docx_第6页
第6页 / 共19页
江苏大学接口实验报告.docx_第7页
第7页 / 共19页
江苏大学接口实验报告.docx_第8页
第8页 / 共19页
江苏大学接口实验报告.docx_第9页
第9页 / 共19页
江苏大学接口实验报告.docx_第10页
第10页 / 共19页
江苏大学接口实验报告.docx_第11页
第11页 / 共19页
江苏大学接口实验报告.docx_第12页
第12页 / 共19页
江苏大学接口实验报告.docx_第13页
第13页 / 共19页
江苏大学接口实验报告.docx_第14页
第14页 / 共19页
江苏大学接口实验报告.docx_第15页
第15页 / 共19页
江苏大学接口实验报告.docx_第16页
第16页 / 共19页
江苏大学接口实验报告.docx_第17页
第17页 / 共19页
江苏大学接口实验报告.docx_第18页
第18页 / 共19页
江苏大学接口实验报告.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

江苏大学接口实验报告.docx

《江苏大学接口实验报告.docx》由会员分享,可在线阅读,更多相关《江苏大学接口实验报告.docx(19页珍藏版)》请在冰点文库上搜索。

江苏大学接口实验报告.docx

江苏大学接口实验报告

通信网络接口编程

实验报告

学院:

计算机科学与通信工程学院

班级:

姓名:

学号:

 

2014.05.08

实验一、简单的客户机/服务器程序的实现

一、说明

1、建立项目时选择创建windows控制台程序,同时选择包含MFC类库。

所谓控制台程序指模拟的DOS字符提示,而不是windows应用程序的图形界面。

2、头文件说明#include<....>表示引用标准库的头文件。

(#include"..."表示引用非标准库的头文件)

3、每次做实验时都看一下“实验说明”文档。

二、实验要求

1、读懂参考程序,说明客户机/服务器的地址定位、while(true)的作用等。

①客户机/服务器的地址定位的作用:

发起通信连接的称为客户端,而等待呼叫请求的是服务器;

②While(ture)的作用:

连续监听是否有客户端连接,如果有客户机接入就可以向它发送信息。

2、调试参考程序,打印运行结果

1客户端:

3、(合理)调整客户机/服务器的端口,检查可行性

4、改服务器的输送字符为控制台输入方法(用gets函数)

运行结果:

1服务端:

2客户端:

5、将客户机/服务器分开运行(客户机用本机地址运行,服务器安装到另一台机器上)多客户同时访问服务器,说明运行结果

答:

能同时进行访问。

6、说明并分析实验过程中遇到的问题、原因及解决方法

答:

遇到的问题:

1修改了buf[]的容量后还是出现“烫烫烫……”。

原因:

没改IP地址。

解决方法:

将IP地址改成匹配的地址。

7、按以上要求完成实验报告

8、思考实验中输入、输出缓冲区的匹配问题与TCP字节流传输方式有没有矛盾

答:

没有矛盾,因为输入、输出缓冲区的匹配问题导致了最终客户端接收的信息不完整,而TCP字节流传输方式是一种可靠的传输方式,也就是说保证了字节流在传输过程中不会存在比特信息位的丢失问题,所以两者并不矛盾。

三、参考程序

客户端:

#pragma comment(lib,"ws2_32.lib")

 #include 

 #include 

 void main() 

 { 

 WSADATA wsaData; 

 WSAStartup(MAKEWORD(2,2),&wsaData); 

 SOCKET connSock=socket(AF_INET,SOCK_STREAM,0); 

 SOCKADDR_IN servAddr; 

char buf[50]; 

 servAddr.sin_family=AF_INET; 

servAddr.sin_port=htons(9878); 

 servAddr.sin_addr.s_addr=inet_addr("202.195.167.96"); 

  connect(connSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN)); 

 recv(connSock,buf,50,0); 

 printf("%s",buf); 

getchar();

 } 

服务器端:

#pragma comment(lib,"ws2_32.lib") 

 #include 

 void main() 

 { 

 WSADATA wsaData; 

 WSAStartup(MAKEWORD(2,2),&wsaData); 

 SOCKET servSock,cliSock; 

 SOCKADDR_IN servAddr; 

 servAddr.sin_family=AF_INET; 

 servAddr.sin_port=htons(9878); 

 servAddr.sin_addr.s_addr=htonl(INADDR_ANY); 

 servSock=socket(AF_INET,SOCK_STREAM,0); 

 bind(servSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN)); 

 listen(servSock,5); 

 while(true) 

 { 

 cliSock=accept(servSock,NULL,NULL); 

 send(cliSock,"欧燕秋,加油↖(^ω^)↗",50,0);

 } 

 }

实验二、参数backlog测试

一、实验内容与步骤

1、send和recv函数中参数len的作用

调整实验一中len值的大小,使其分别小于、大于实际写入/读出的值

运行结果:

1len值小于实际写入值,能显示实际值的部分的信息,大于实际值的出现“烫烫烫……”,如图:

2len值大于实际写入值,能显示所有信息,如图:

2、Listen函数中参数backlog的作用

a)将实验一中backlog的值设为5,分别让5个、6个、6个以上的客户端同时或间隔访问一个服务器,观察访问情况;

答:

将实验中的backlog的值定为1,让2个客户端同时或间隔访问一个服务器,两个客户端均能接收到信息。

b)在实验一服务器接收连接的处理程序中加入一Sleep()函数(首字母大写),再次重复a),观察访问情况。

答:

加入Sleep()函数后,客户端接收时会有延时。

延时时长根据函数中所定的值。

二、实验报告要求

用抓图方法表示实验结果,并对结果进行分析说明。

注意:

1、backlog参数控制的是同时某一时刻等待连接的客户数,不包括accept函数已经连接上的客户数;

2、在服务器程序中增加一Sleep()函数(首字母大写)延长的是服务器接收连接请求的速度。

实验三、简单差错控制设计

一、实验内容

1、对主要Sockets函数的调用:

客户端的connect和recv,服务端的bind,send等,给出必要的执行过程、执行结果(包括成功与失败,主要为失败)的提示与反馈(显示具体的调用错误);

2、再次对Listen函数中参数backlog值和客户端用户数进行调试,观察执行情况;

3、从控制面板查看系统所开启的服务,用差错程序进行验证。

二、实验要求

1、给出程序清单

2、用抓图方法表示实验结果,并对结果进行必要的分析说明

运行结果:

①运行服务器时:

②不运行服务器时:

实验四、select模型的使用

一、实验内容

1.以一对多聊天的方式,运行实验一的C/S程序

2.用select函数对客户端进行优化,控制等待服务器反馈的时间

3.用select函数对服务器进行优化,控制等待客户端输入信息的时间

4.再以一对多聊天的方式,运行该C/S程序

二、实验报告要求

比较使用select函数前后该C/S程序的运行性能(在程序里添加用户的平均等待时延、服务器单位时间内接收的用户数统计),调整等待时间的大小,观察执行结果。

注:

参考程序中主函数是带参数的,编译之前需在项目——属性——编译配置——命令参数中预先输入服务器的IP地址和端口号,其间用空格分隔;也可以删除主函数中的参数改用直接赋值或手工输入。

配置如下:

接收数据在默认的阻塞模式下的套接字里,recv会阻塞在那里,直到套接字连接上有数据可读,把数据读到buffer后recv函数才会返回,不然就会一直阻塞在那里。

在单线程的程序里出现这种情况会导致主线程和单线程程序里只有一个默认的主线程被阻塞,这样整个程序被锁死在这里。

如果永远没数据发送过来那么程序就会被永远锁死。

这个问题可以用多线程解决,但是在有多个套接字连接的情况下,这不是一个好的选择。

select模型就是为了解决这个问题而出现的,select模型的作用就是防止在在阻塞模式的套接字里被锁死,避免在非阻塞套接字里重复检查WSAEWOULDBLOCK错误。

启动服务器端之后,各个客户端接入服务器,并且向服务器发送信息,服务器端接收到客户端发送过来的信息之后会回复给客户端一个确认信息。

如下图所示:

 

①客户端:

②服务器端:

 

实验五、广播发送与接收程序设计

一、实验报告要求

用抓图方法表示实验结果

运行结果:

①发送端:

②接收端:

实验六、多播发送与接收程序设计

一、实验报告要求

用抓图方法表示实验结果

运行结果:

①发送成功:

②多播显示:

实验七、线程的同步

一、实验内容

1、用多线程方法实现一个包含读线程和写线程的主程序。

对线程的执行顺序不加控制。

2、用事件对象机制实现如下要求的线程同步:

写线程在读线程之后执行,主程序在写线程执行完后才结束。

3、用临界区对象机制实现如下要求的线程同步:

写线程与读线程互斥进行(不强调顺序),主程序在读写线程执行完后才结束。

4、用线程池实现实验四的select模型(参考P285程序)。

二、实验报告要求

用抓图方法表示实验结果

运行结果:

①对线程不加控制:

(这种情况下各个线程从主线程开始后就抢占系统资源,先抢占到资源的线程就先执行)

②事件对象机制

(使用事件对象机制来通知等待线程某个条件已满足。

主线程先开始,一个线程执行,同时有一个线程处于等待状态,这个线程执行完之后,接着执行下一个线程,直到所有的线程执行完毕。

③临界区对象机制

(在任意时刻只允许一个线程对共享资源进行访问。

如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。

临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

④线程池机制

(线程池技术是在开始就创建一定量的线程,批量处理一类任务,等待任务的到来。

任务执行完毕后,线程又可以执行其他的任务。

等不再需要线程的时候,就销毁。

这样就省去了频繁创建和销毁线程的麻烦。

实验八、可视化客户端

一、设计介绍

1、客户端功能:

用户登录到服务器后可以发送内容,然后可以看到在线成员

以及大家聊天的内容。

勾选悄悄话后可以和某个用户进行私密聊天,其他成员在聊天内容区是看不到私密聊天内容的。

2、客户端功能模块:

服务器登录地址、端口、昵称、连接、断开、聊天内容显示、清除聊天内容、在线成员、发送内容输入、发送按键、聊天对象、悄悄话功能。

3、服务器功能:

当用户登录成功之后,会在服务器端显示在线用户的昵称,可以在服务器端强制断开某个人的连接,退出功能可以关闭服务器并提醒用户。

4、服务器功能模块:

显示在线用户,断开用户连接、退出。

二、可视化软件效果图

设定服务器地址后,使用8023端口和自定义昵称就可以连接到服务器,连接成功后会有提示。

需要服务器先启动。

(如上图所示)

设置界面上各个部件的属性设置(如上图)

以上三个图显示了聊天的内容,有一对一的聊天(悄悄说部分),有一对多的聊天。

右下角设置栏里可以设置聊天对象,一对一聊天需要对悄悄话一栏设置设置(在悄悄话的选项框打勾)。

点击清除聊天记录按钮会将聊天内容区显示的消息清除。

右边的在线成员一栏,显示的是当前在线成员。

服务器端显示里在线用户的列表,强制退出的按钮可以从服务器端使某用户单独退出,用户将看到如下图所示的提示。

而在线的其他用户将收到服务器发出的提示信息,**的连接断开。

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

当前位置:首页 > 人文社科 > 法律资料

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

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