- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?计算机网络编程?;应用程序如何发起通信成为客户
应用程序如何使用TCP或UDP与效劳器联系
应用程序如何使用套接字调用与协议交互;应用程序必须指明的细节
客户还是效劳器
端点地址
使用面向连接的还是无连接的
如何执行授权和防护准那么
所需要的缓存的大小等
只需要概念性地了解套接字API
需要详细了解构造通信程序的各种方法,便于迅速作出设计决策。;客户应用程序比较简单:
不必明显地处理并发性
不需要特权,和常规的应用程序一样执行
不需要强行保护,依赖操作系统自动强迫执行保护;在编译程序时,将效劳器的域名或者IP地址说明为常量
执行快,但是效劳器移动后不便
要求用户在启动程序时标定效劳器
使用机器名,不必重新编译客户程序
从稳定的存储设备中获得关于效劳器的信息
如果文件不存在,客户软件就不能执行
使用某个单独的协议来找到效劳器(如播送或组播)
只能在本地小环境下应用
实际:用户在调用客户软件时指明效劳器地址
根据实际情况,综合标识效劳器地址;客户程序调用时常指明参数,客户使用参数语法:
域名方式或IP地址方式
域名和IP地址确实定:扫描参数,看是否含有字母。
全参数化的客户软件允许用户指明协议端口号和机器
使用两个参数:mail.uestc.edusmtp
使用单个参数:mail.uestc.edu:smtp
遵循本地系统的约定:linux使用单独参数指明效劳器的机器地址和协议端口;使用sockaddr_in结构指明效劳器的地址
需要二进制表示的32bitIP地址
套接字对地址转换的支持〔两个库例程〕
inet_addr:IP地址点分十进制的字符串到二进制的转换
接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址
gethostbyname:主机域名到二进制的转换
接受一个机器域名字符串,返回一个hostent结构,内含一个二进制表示的主机IP地址;structsockaddr_insock;
sock.sin_addr.s_addr=inet_addr(“192.168.0.1〞);//接受一个点分十进制表示的字符串的地址,返回一个等价的二进制的地址
;hostent在文件netdb.h的定义
structhostent{
char *h_name;
char**h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
};
#defineh_addrh_addr_list[0]
h_addr指向???机地址表第一个
位置;getservbyname:两个参数指明期望的效劳和协议。返回servent类型的结构指针;
注意网络字节顺序和本地机器的表示方法;;getprotobyname:由协议名返回协议号;返回一个protoent类型结构的地址;找到期望与之通信的效劳器IP地址和协议端口号
分配套接字
指明此连接需要在本地机器中的、任意的、未使用的协议端口,并允许TCP选择一个这样的端口
将这个套接字连接到效劳器
使用应用级协议与效劳器通信
关闭连接;使用socket函数
将协议和效劳分别说明为PF_INET和SOCK_STREAM
include语句包含一些定义常量的文件
对于TCP/IP,第三个参数没有用。;效劳器运行于熟知的端口上,客户不是。
客户使用端口的规那么:
该端口不与该机器其他进程使用端口冲突
该端口没有被分配给某个熟知效劳
客户允许TCP自动选择本地端口
connect调用的一个效果就是所选择的本地端口能够满足上述准那么。;对于只挂在一个网络上的主机是简单的
正确的选择依赖于选路信息,但应用程序很少使用选路信息,实际中存在的问题:
一个主机可能具有多个IP地址
如果应用程序随机选择一个IP地址,可能选择了一个与IP地址的接口并不匹配的地址。
可能能够正确的工作。但是网络管理会困难和混乱,可靠性降低。
一般本地地址字段不填,允许TCP/IP自动选取本地IP地址;connect函数:允许TCP套接字发起连接
强迫执行下层的三次握手
超时或者建立连接后返回
三个参数:
retcode=connect(s,remaddr,remaddrlen);
s:套接字的描述符
remaddr:一个sockaddr_in类型结构的地址
remaddrlen:第二个参数的长度
connect的四项任务
对指明的套接字进行检测:有效,还没有连接
将第二个参数给出的端点地址填入套接字中
为此套接字选择一个本地端点地址
发起一个TCP连接,并返回一个值;客户发送请求,等待响应
发送请求:send;
等待响应:recv;
send(s,req,strlen(req),0
您可能关注的文档
- 小本创业的成功技巧:了解你的顾客及竞争对手.ppt
- 网站建设与管理第7、8、9章.ppt
- 如何建立优秀的手机销售经营处.ppt
- 图在日常生活及科学技术领域都有着广泛的应用.ppt
- 鲁班软件三层小别墅案例一教材.ppt
- 美国航运政策和法律.ppt
- 昆区第三届小学生科学知识竞赛.ppt
- 高考地理答题技巧.ppt
- 富爸爸的故事_案例分析报告..ppt
- 高科技犯罪——教育与防范.ppt
- 2020年药事管理与法规题解析 .pdf
- 2017-2021年中国高速公路行业现状及发展趋势分析 .pdf
- 2012年电力工业发展报告 .pdf
- 贵州省贵阳市某区2022-2023学年八年级上学期期末语文试题(原卷版).docx
- 河北省沧州市2022-2023学年八年级上学期期末语文试题(解析版).docx
- 海南省省直辖县级行政单位2022-2023学年八年级上学期期末语文试题(原卷版).docx
- 海南省东方市2022-2023学年九年级上学期期末语文试题(原卷版).docx
- 河北省邯郸市锦玉中学2022-2023学年八年级上学期期末语文试题(解析版).docx
- 海南省海口市(部分校)2022-2023学年八年级上学期期末语文试题(A)(原卷版).docx
- 河北省保定市第十七中学2022-2023学年八年级上学期期末语文试题(原卷版).docx
文档评论(0)