- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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-styleclose() 和 shutdown() --滚开!getpeername() --你是谁?gethostname() --我是谁?DNS --你说“白宫”,我说 198.137.240.100
socket函数
功能:指定协议类型定义:?#include sys/types.h#include sys/socket.hint socket(int family, int type, int protocol);返回值出错: -1?成功: 套接口描述字 (socket file descriptor)(套接字)sockfd??
socket 函数指定了协议族(IPv4、IPv6或unix)和套接口类型(字节流、数据报或原始套接口)。但并没有指定本地协议地址或远程协议地址。
理解socketsocket使用 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.hint 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.hint bind(int sockfd, const struct sockaddr *my_addr, int addrlen);sockfd 是调用 socket 返回的文件描述符。my_addr
您可能关注的文档
最近下载
- 江苏省2024届高三上学期10月大联考英语试卷(含答案).docx VIP
- (英文绘本)安东尼·布朗《我妈妈》My Mum.pdf
- Risk软件在微生物定量风险评估中的应用-食品微生物安全与.PDF VIP
- 《品牌形象策划》课程教学大纲(本科).pdf
- 23S516 混凝土排水管道基础及接口图集.docx VIP
- 2023年电工(技师)证考试题库及答案.docx
- 商务词汇使用Businessvocabularyinuse.pdf VIP
- 2024脑脊液漏规范化管理中国专家共识(全文) .pdf VIP
- 新质生产力推动高质量发展(下)考试 .docx VIP
- 2019语文高考小说的叙述角度人称作用.pptx
文档评论(0)