基本TCP套接口编程.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基本TCP套接口编程一 概述 socket() --得到文件描述符! bind() --我们在哪个端口? connect() --Hello! listen() --有人给我打电话吗? accept() --Thank you for calling port 3490. send() 和 recv() --Talk to me, baby! sendto() 和 recvfrom() --Talk to me, DGRAM-style close() 和 shutdown() --滚开! getpeername() --你是谁? gethostname() --我是谁? DNS --你说“白宫”,我说 198.137.240.100 socket函数 功能:指定协议类型 定义:? #include sys/types.h #include sys/socket.h int socket(int family, int type, int protocol); 返回值 出错: -1? 成功: 套接口描述字 (socket file descriptor)(套接字)sockfd?? socket 函数指定了协议族(IPv4、IPv6或unix)和套接口类型(字节流、数据报或原 始套接口)。但并没有指定本地协议地址或远程协议地址。 理解socket socket使用 Unix 文件描述符 (file descriptor) 和其他程序通讯的方式。 Unix 程序在执行任何形式的 I/O 的时候,程序是在读或者写一个文件描述符。 一个文件描述符只是一个和打开的文件相关联的整数。 这个文件可能是一个网络连接,FIFO,管道,终端,磁盘上的文件或者什么其他 的东西。Unix 中所有的东西是文件!因此,与 Internet 上别的程序通讯的时候, 要通过文件描述符。利用系统调用 socket()得到网络通讯的文件描述符。他返回 套接口描述符 (socket descriptor),然后再通过他来调用 send() 和 recv()。 那么为什么不用一般的调用 read() 和 write() 来通过套接口通讯? 简单的答案是:可以使用一般的函数! 详细的答案是:使用 send() 和 recv() 让你更好的控制数据传输。 connect 函数 功能:建立与TCP服务器的连接 定义:? #include sys/types.h #include sys/socket.h int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); //sockfd 是系统调用 socket() 返回的套接口文件描述符 serv_addr 是保存着目的地端口和 IP 地址的数据结构 struct sockaddr //addrlen 设置为 sizeof(struct sockaddr) connect 激发 TCP的三路握手过程 服务器必须准备好接受外来的连接。 这通过调用socket,bind和1isten函数来完成,称为被动打开(Passive open) 客户通过调用connect进行主动打开(active opn)。 这引起客户TCP发送一个SYN分节(表示同步),它告诉服务器客户将在(待建立的) 连接中发送的数据的初始序列号。 服务器必须确认客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在 同一连接中发送的数据的韧始序列号。服务器以单个分节向客户发送SYN和对客户 SYN的ACK。客户必须确认服务器的SYN。 connect 出错时的返回 出错原因 :未收到SYN的响应(服务器超时,75s) 返回值:ETIMEDOUT 用户端输出:Connection time out. ?? 出错原因 :收到RST响应(Hard error)SYN到达服务器,但该服务器的无此项端口服务 返回值:ECONNREFUSE 用户端输出:Connection refused 出错原因 :ICMP错误:不可路由(soft error)(目的地不可达) 返回值:EHOSTUNREACH 用户端输出:ENETUNREACH No route to host bind 函数 功能:给套接口分配一个本地协议地址 定义: #include sys/types.h #include sys/socket.h int bind(int sockfd, const struct sockaddr *my_addr, int addrlen); sockfd 是调用 socket 返回的文件描述符。 my_addr

文档评论(0)

orhchv6 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档