电子科技大学网络软件设计复习

发布时间:2023-01-19 08:49:02   来源:文档文库   
字号:
实验二:通信程序基本流程
*掌握四种类型程序最简单。最基本的流程
0 面向连接服务器/客户机,无连接服务器/客户机
1 面向连接的服务器流程:申请套接字;确定本地端点,填写端点地址;建立
套接字与端点关系;设置为监听模式(服务器模式 ;接受一个连接;完成通信
过程;关闭连接的套接字。
s = socket( ; address = …; bind( s,address listen(s; newsock = accept( s ; recv( newsock ; send( newsock
closesocket( newsock
2 面向连接的客户机流程;申请套接字;确定本地端点,填写端点地址;建立
套接字与端点关系;确定服务器端点;与服务器建立连接;完成通信过程;关 闭套接字。
s = socket( ; c_addr = …; bind(s,c_addr s_addr = …;
connect(s , s_addr; recv( s ; send( s ; closesocket( s ;
3 无连接的服务器流程;申请套接字;确定本地端点,填写端点地址;建立端
点与套接字关系;等待接收数据;完成通信过程;关闭套接字
4 无连接的客户机流程;申请套接字;确定本地端点,填写端点地址;建立端
点与套接字关系;发送数据;完成通信过程;关闭套接字 *流程中重要的变量
0 套接字标识符
o 缓冲区
流程中具有阻塞功能的函数,通过调试体会阻塞的实际效果
o accept o recv o recvfrom o connnect 实验三:客户服务器模式
验证只有在客户服务器方式才能建立正常通信
对比测试:采用两个客户机,互相之间不能建立连接。
采用两个客户机是否可能有一方建立成功?为什么?
有时能成功建立连接,与系统的
TCP/IP协议版本有关,理论上只有客户
/服务器模式才能通信。TCP/IP2004年新版本中在客户机状态转换中增加了等 SYN报文的处理,提高了客户机之间建立连接的可能性,增加的这个“等
待”没有违反客户/服务器原则。
服务器例程是否一定要设计为循环等待模式
还有其他选择吗如果不循环可
以吗
不循环,就只能为一个客户服务循环起来就能在完成一个通信服务以后 接收下一个连接
实验四:套接字标识符本地有效
*验证套接字标识符的作用范围仅限于一个进程内
证明方法在两个不同的进程中使用相同的套接字标识符可以完成两个 不同的通信
本实验的两个例程如果与相同的服务器建立连接会怎样

不同进程中使用相同的套接字标识符并不互相影响
•不同进程使用相同的套接字 绑定相同的端口号是否可以
不可以相同的端口号将影响系统对通信身份的确定和区分
通信服务的共享即如何让两个不同的进程共享一个通信服务
即与远方同一
个进程通信
需要高超手段----对套接字控制(REOPEN,高层还需要设计一个协议, 至少能够区分不同的应用进程。
实验五:套接字接口函数
1. 针对常用的套接字函数进行测试
向连接服务器的各接口函数: socketbi ndliste n acceptsendrecv
closesocket o 掌握套接字接口函数的基本功能

•掌握通过去函数返回值判断是否出错的方法 o 掌握通过WSAGetlasterror取得出错类型的方法 o 增加网络程序调试的经验
•使用的主要测试方法
o 使用异常参数测试:如边界值,越界值等
•常见的错误:
10038 :在一个非套接字上尝试了一个操作。
10048 :通常每个套接字地址协议/网络地址/端口只允许使用一次。 10061 :由于目标计算机积极拒绝,无法连接。 10054 :远程主机强迫关闭了一个现有的连接。 10035 :无法立即完成一个非阻止性套接字操作。 2. 主要的收获
*大多数非AF_INET协议没有得到win sock的支持 *流套接字可以由不同协议支持,但目前是
TCP •不能再已经有套接字活动的端口上再绑定一个套接字
listen制定个数为0时,也能接受客户连接
Accept虽然可以传入一个端点地址结构给系统,但不能通过它限制只从某个
连接对端接受连接
•接收时的缓冲区指针必须事先指向一个“实际”可使用的空间,而且缓冲区
大小参数也只能小于实际大小,不能超过。 *发送时的缓冲区也需要遵循同样的原则
不能与INADDR_AN地址、广播地址建立连接 Recvfrom 一定要先建立本地半相关,即先确定在哪个
UDP端口上收数据
*如果前一次sendto将数据传送到了无人接收的地方,下一次recvfrom将得到
一个错误返回,类似信件被退回的提示
实验六:网络字节序
*测试与网络字节序有关的函数的功能
htonl htons n tohl n tohs in et_addr inet_n toa •利用调试器观察内存,了解数据存放情况
o 整数在Intel PC机)内存中存放时低地址存放低字节,观察起来类似
“写反了”效果;经过字节序函数处理以后, 就变成了低地址存放高字 节,好像“写正了”。
o 就算是同样的数据,如果解读内存的方法不同,得到的是不同的结果。
例如:八王,从左往右读是八王,从右往左读就成了王八。

利用sniffer截取分组,观察上述函数的实际执行效果 *如果通信两边是相同的硬件体系,则都执行或都不执行网络字节序函数,结
果都是正确的。
o 但是如果不能确定以上条件,
即两边是否相同的硬件体系, 以及对方是
否执行网络字节序,则应遵守标准一一执行字节序函数
实验七:隐式绑定
掌握隐式绑定的作用

了解具有隐式绑定功能的套接字接口函数
o connet
sendto
利用netsstat命令观察端口活动的状态
o 可进一步观察系统隐式分配端口的规律
隐式绑定不影响通信的正常完成,而且会带来很大的便利,特别是同时执行
多个客户机程序时,每个客户机的程序相同,由系统分配不同的端口号,采 用显示绑定则只能有一个客户机能成功,其他的客户机会绑定失败。
•系统为什么不推荐在本地一个端口上显示绑定多个套接字的方法呢?
o 容易引起混淆,例如这些客户机都与同一个服务器连接时这条多连接上
通信双方的地址和端口号都相同,无法区分了。
实验八:accept与连接建立 掌握与连接建立相关的函数的执行效果,特别是与 TCP议的配合情况
利用sniffer在单步调试程序时截取报文,可以了解函数执行与协议配合的情
o listen后,TCP实体可自动与客户机完成三次握手过程,即执行 accpet 前,连接已经将建立了
o connect并不产生任何TCP报文
通过多次对比测试,发现系统总的连接数会大于
listen限定的客户数量,这
是因为listen只限定了尚未通过 accpet交用户接管的暂存在系统的连接数量
0 所以,listen不能限制连接总数
o 另一方面,由于listen的限定有限,要更多地接入客户,就应尽量加大
执行accept的频率,以提高“接通率”。
如何使服务器在连接建立期间拒绝连接?
o 除了在listen 中限定个数外,没有其他手段(接口函数)可以再连接

本文来源:https://www.2haoxitong.net/k/doc/a0180608a3c7aa00b52acfc789eb172dec63997e.html

《电子科技大学网络软件设计复习.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式