- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二:通信程序基本流程
*掌握四种类型程序最简单。最基本的流程
0 面向连接服务器/客户机,无连接服务器/客户机
面向连接的服务器流程:申请套接字;确定本地端点,填写端点地址;建立
套接字与端点关系;设置为监听模式(服务器模式) ;接受一个连接;完成通信
过程;关闭连接的套接字。
s = socket( …); address = …;
bind( s,address …); listen(s);
newsock = accept( s ); recv( newsock );
send( newsock ); closesocket( newsock )
面向连接的客户机流程;申请套接字;确定本地端点,填写端点地址;建立 套接字与端点关系;确定服务器端点;与服务器建立连接;完成通信过程;关 闭套接字。
s = socket( …); c_addr = …;
bind(s,c_addr …); s_addr = …;
connect(s , s_addr); recv( s ); send( s ); closesocket( s );
)无连接的服务器流程;申请套接字;确定本地端点,填写端点地址;建立端 点与套接字关系;等待接收数据;完成通信过程;关闭套接字
)无连接的客户机流程;申请套接字;确定本地端点,填写端点地址;建立端 点与套接字关系;发送数据;完成通信过程;关闭套接字
*流程中重要的变量
0 套接字标识符
o 缓冲区
流程中具有阻塞功能的函数,通过调试体会阻塞的实际效果
o accept
o recv
o recvfrom
o connnect
实验三:客户服务器模式
验证只有在客户服务器方式才能建立正常通信
对比测试:采用两个客户机,互相之间不能建立连接。
采用两个客户机是否可能有一方建立成功?为什么?
有时能成功建立连接,与系统的 TCP/IP协议版本有关,理论上只有客户
/服务器模式才能通信。TCP/IP2004年新版本中在客户机状态转换中增加了等 待SYN报文的处理,提高了客户机之间建立连接的可能性,增加的这个“等 待”没有违反客户/服务器原则。
服务器例程是否一定要设计为循环等待模式 ?还有其他选择吗?如果不循环可
以吗?
不循环,就只能为一个客户服务,循环起来就能在完成一个通信服务以后 接收下一个连接?
实验四:套接字标识符本地有效
*验证套接字标识符的作用范围仅限于一个进程内
证明方法:在两个不同的进程中,使用相同的套接字标识符可以完成两个 不同的通信?
本实验的两个例程如果与相同的服务器建立连接会怎样 ?
不同进程中使用相同的套接字标识符并不互相影响
?不同进程使用相同的套接字 ,绑定相同的端口号,是否可以?
不可以,相同的端口号将影响系统对通信身份的确定和区分
通信服务的共享:即如何让两个不同的进程共享一个通信服务 ,即与远方同一
个进程通信?
需要高超手段----对套接字控制(REOPEN,高层还需要设计一个协议, 至少能够区分不同的应用进程。
实验五:套接字接口函数
针对常用的套接字函数进行测试
向连接服务器的各接口函数: socket、bi nd、liste n 、accept、send、recv、
closesocket
o 掌握套接字接口函数的基本功能
?掌握通过去函数返回值判断是否出错的方法
o 掌握通过WSAGetlasterror取得出错类型的方法
o 增加网络程序调试的经验
?使用的主要测试方法
o 使用异常参数测试:如边界值,越界值等
?常见的错误:
10038 :在一个非套接字上尝试了一个操作。
10048 :通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
10061 :由于目标计算机积极拒绝,无法连接。
10054 :远程主机强迫关闭了一个现有的连接。
10035 :无法立即完成一个非阻止性套接字操作。
主要的收获
*大多数非AF_INET协议没有得到win sock的支持
*流套接字可以由不同协议支持,但目前是 TCP
?不能再已经有套接字活动的端口上再绑定一个套接字
listen制定个数为0时,也能接受客户连接
Accept虽然可以传入一个端点地址结构给系统,但不能通过它限制只从某个 连接对端接受连接
?接收时的缓冲区指针必须事先指向一个“实际”可使用的空间,而且缓冲区 大小参数也只能小于实际大小,不能超过。
*发送时的缓冲区也需要遵循同样的原则
不能与INADDR_AN丫地址、广播地址建立连接
Recvfrom 一定要先建立本地半相关,即先确定在哪个 UDP端口上收数据
*如果前一次sendto将数据传送到了无人接收的地方,下一次recvfrom将得到 一个错误返回,类似信件被退回的提示
实验六:网络字节序
*测试与网络字节序有关的函数的功能
htonl
文档评论(0)