- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第03章 TCP套接字基础.ppt
* 共16字节 * * 说明: * 说明: 1、字节流服务:一列8-bit的字节流在TCP连接的两端进行传输,该字节流中没有任何记录标识. 2、如果一个应用首先在一端写入10字节,随后又写入20字节,然后再50字节。于是在连接的另外一端的应用无法区分这3次数据分别是以多大字节写入的,接收方可能分4次分别读入20字节共80字节。因此一端将一字节流写入TCP,在接收方将出现完全相同的字节流 * 说明: 1、3个数据块分别是独立的3个数据报,接收方将分别收到 2、由于数据报套接字并不知道传输过程中是否发生了数据丢失,因此对于数据差错的发现和纠正只能通过应用层来进行保证 * 说明: * 说明: * 说明: * 说明: * 作用:用于在TCP客户端与服务端建立链接,执行该函数后会启动三次握手的过程,要么建立链接,要么失败。 参数:sockfd是由socket函数返回的套接字描述符,serveraddr指向一个sockaddr_in的地址结构,在进行connect函数调用时,须将scokaddr_in结构转换成通用的sockaddr,serveraddrlen是该套接字地址结构的大小。 返回值:0表示成功,-1表示失败 errno记录错误代码 * 说明: * 说明: * 说明: * 说明: * * * * * * * * * 第3章 TCP套接字基础 * Socket基本概念 理解套接字Socket 当进行电话通信时,必须建立一个具有两个端点的通信线路: 你的电话(在你的位置处) 对方的电话(在对方位置处) 套接字代表通信线路中的端点 * 创建套接字 #include sys/types.h #include sys/socket.h int socket(int domain, int type, int protocol); 套接字的域名(domain),代表套接字地址族 套接字的类型(types),最常用的两个值是SOCK_STREAM 和SOCK_DGRAM 使用的协议(protocol),一般情况下该参数为0,表示由系 统在当前设定的domain下,自动选择适合的协议类型 * 域和地址族 AF_UNIX, AF_LOCAL 用于本地通信 AF_INET, PF_INET IPv4,Internet协议 AF_INET6 IPv6,Internet协议 AF_IPX Novell 网络协议 AF_X25 ITU-T X.25 / ISO-8208 协议 ... ... * 通用套接字地址结构 #include sys/socket.h struct sockaddr{ sa_family_t sa_family; char sa_data[14]; } sa_family sa_data[14] 2 bytes * Internet套接字地址结构-1 #include netinet/in.h struct sockaddr_in{ sa_family_t sa_family; uint16_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; } struct in_addr{ uint32_t s_addr; } * Internet套接字地址结构-2 sa_family=AF_INET sin_port sin_addr sin_zero[8] 2 bytes * 远程主机信息函数 #include netdb.h struct hostent *gethostbyname(const char *name); struct hostent { char *h_name; /* 主机的正式名称 */ char **h_aliases; /* 主机别名列表 */ int h_addrtype; /* 主机地址类型 */ int h_length; /* 地址长度 */ char **h_addr_list; /* 地址列表 */ }; /* 保持后向兼容 */ #define h_addr h_addr_list[0] * 流式套接字 提供面向连接的,可靠的字节流服务 面向连接意味着客户和服务器在进行实际数据传输前必须先建立一个TCP连接 50 20
文档评论(0)