版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Linux网络编程培训哪个好Linux下的网络编程培训哪个好?先来了解一下什么事Linux下的网络编程吧!Linux下的网络编程指的是socket套接字编程,入门比较简单。在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾。总感觉每次看的时候都有收获,但是每次看完了之后,过段时间不看,重新拾起这些知识的时候又要从头开始,所以,在这里做个笔记也算是做个模板,以后可以直接从某一个阶段开始接着玩socket套接字基本函数介绍1 创建socket套接字int socket(int family, int type, int protocol;功能介绍:在Linux
2、操作系统中,一切皆文件,这个大家都知道,个人理解创建socket 的过程其实就是一个获得文件描述符的过程,当然这个过程会是比较复杂的。可以从内核中找到创建socket的代码,并且socket的创建和其他的listen,bind 等操作分离开来。socket函数完成正确的操作是返回值大于0的文件描述符,当返回小于0的值时,操作错误。同样是返回一个文件描述符,但是会因为三个参数组合不同,对于数据具体的工作流程不同,对于应用层编程来说,这些也是不可见的。参数说明:从socket创建的函数可以看出,socket有三个参数,family代表一个协 议族,比较熟知的就是AF_INET,PF_PACKET等
3、;第二个参数是协议类型,常见类型是SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_PACKET等;第三个参数是具体的协议,对于标准套接字来说,其值是0,对于原始套接字来说就是具体的协议值。2 地址端口绑定函数bindint bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen;功能介绍:bind函数主要应用于服务器模式一端,其主要的功能是将addrlen长度struct sockaddr类型的myaddr地址与sockfd文件描述符绑定到一起,在sockaddr中主要包含服务器端的协议
4、族类型,网络地址和端口号等。在客户端模式中不需要使用bind函数。当bind函数返回0时,为正确绑定,返回-1,则为绑定失败。参数说明:bind函数的第一个参数sockfd是在创建socket套接字时返回的文件描述符。bind函数的第二个参数是struct sockaddr类型的数据结构,由于struct sockaddr数据结构类型不方便设置,所以通常会通过对truct sockaddr_in进行地质结构设置,然后进行强制类型转换成struct sockaddr类型的数据,下面是两种类型数据结构的定义和对应关系图。 typedef unsigned short sa_family_t;str
5、uct in_addr _be32 s_addr;struct sockaddr sa_family_t sa_family; /* address family, AF_xxx */ char sa_data14; /* 14 bytes of protocol address */ ;/* Structure describing an Internet (IP socket address. */#define _SOCK_SIZE_ 16 /* sizeof(struct sockaddr */ struct sockaddr_in sa_family_t sin_family; /*
6、 Address family */ _be16 sin_port; /* Port number */struct in_addr sin_addr; /* Internet address */* Pad to size of struct sockaddr'. */unsigned char _pad_SOCK_SIZE_ - sizeof(short int -sizeof(unsigned short int - sizeof(struct in_addr; 图5 struct sockaddr_in和struct sockaddr的映射关系bind函数的第三个参数是指定st
7、ruct sockaddr类型数据的长度,因为前面讲过bind函数的第二个参数是通过设置一个较容易的数据结构,然后通过强制类型转换成struct sockaddr,实际上,第二个参数具体的数据结构的长度会根据socket创建时,设置的family协议族的不同而不同,像AF_UNIX协议族的bind函数第二个参数的数据结构应该是struct sockaddr_un,其大小和struct sockaddr_in不同。3 监听本地端口listenint listen(int sockfd, int backlog;功能介绍:刚开始理解listen函数会有一个误区,就是认为其操作是在等在一个新的con
8、nect的到来,其实不是这样的,真正等待connect的是accept操作,listen 的操作就是当有较多的client发起connect时,server端不能及时的处理已经建立的连接,这时就会将connect连接放在等待队列中缓存起来。这个等待队 列的长度有listen中的backlog参数来设定。listen和accept函数是服务器模式特有的函数,客户端不需要这个函数。当listen运行成功时,返回0;运行失败时,返回值位-1.参数说明:sockfd是前面socket创建的文件描述符;backlog是指server端可以缓存连接的最大个数,也就是等待队列的长度。4 接受网络请求函数ac
9、ceptint accept(int sockfd, struct sockaddr *client_addr, socklen_t *len; 功能介绍:接受函数accept其实并不是真正的接受,而是客户端向服务器端监听端口发起的连接。对于TCP来说,accept从阻塞状态返回的时候,已经完成了三次握手的操作。Accept其实是取了一个已经处于connected状态的连接,然后把对方的协议族,网络地址以及端口都存在了client_addr中,返回一个用于操作的新的文件描述符,该文件描述符表示客户端与服务器端的连接,通过对该文件描述符操作,可以向client端发送和接收数据。同时之前socke
10、t创建的sockfd,则继续监听有没有新的连接到达本地端口。返回大于0的文件描述符则表示accept成功,否则失败。参数说明:sockfd是socket创建的文件描述符;client_addr是本地服务器端的一个struct sockaddr类型的变量,用于存放新连接的协议族,网络地址以及端口号等;第三个参数len是第二个参数所指内容的长度,对于TCP来说其值可以用sizeof(struct sockaddr_in来计算大小,说要说明的是accept的第三个参数要中国 IT 职业教育领先品牌 精品课程 全程面授 是指针的形式,因为这个值是要传给协议栈使用的。 5 连接目标服务器函数 conne
11、ct int connect(int sock_fd, struct sockaddr *serv_addr,int addrlen; 功能介绍: 连接函数 connect 是属于 client 端的操作函数,其目的是向服务器端发送 连接请求,这也是从客户端发起 TCP 三次握手请求的开始,服务器端的协议族, 网络地址以及端口都会填充到 connect 函数的 serv_addr 地址当中。 当 connect 返回 0 时说明已经 connect 成功,返回值是 -1 时,表示 connect 失败。 参数说明: connect 的第一个参数是 socket 创建的文件描述符;第二个参数是一
12、个 struct sockaddr 类型的指针,这个参数中设置的是要连接的目标服务器的协议 族,网络地址以及端口号;第三个参数表示第二个参数内容的大小,与 accept 不同,这个值不是一个指针。 在服务器端和客户端建立连接之后是进行数据间的发送和接收,主要使用 的接收函数是 recv 和 read,发送函数是 send 和 write。因为对于 socket 套接 字来说, 最终实际操作的是文件描述符, 所以可以使用对文件进行操作的接收和 发送函数对 socket 套接字进行操作。对于 UDP 编程来说,其服务器端和客户 端之间没有三次握手建立连接,所以服务器端没有 listen 和 acc
13、ept 函数,客户 端没有 connect 函数。所以对于服务器端来说,没有 accept 函数,所以使用 recvfrom 函数来获取数据的同时获得客户端的协议族,网络地址以及端口号; 对于客户端来说, 没有 connect 函数, 所以使用 sendto 函数发送数据的同时设 千锋教育 中国 IT 职业教育领先品牌 精品课程 全程面授 置服务器端的协议族,网络地址以及端口;同理如果 recvfrom 用在客户端,则 是接收服务器端数据和地址, sendto 用在服务器端,则是发送到客户端网络地 址以及端口数据。 6 接收数据函数 recvfrom ssize_t recvfrom(int
14、sockfd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen; 功能介绍: 对于该函数主要的功能是,从客户端或者服务器端接收数据以及发送方的 地址信息存储到本地的 struct sockaddr 类型参数变量当中,如果函数返回-1, 所说明接收数据失败, 如果返回的是大于等于 0 的值, 则说明函数接收到的数据 的大小。 因为可以设置文件描述符的状态为阻塞模式, 所以在没有接收到数据时, recvfrom 会一直处于阻塞状态,直到有数据接收到。 参数说明: sockfd 是创建 socke
15、t 时的文件描述符; buf 用于存储接收到的数据缓冲 区,接收的数据将放到这个指针所指向的内容的空间中;len 是接收缓冲区的大 小;from 是指向 struct sockaddr 的指针,接收发送方地址信息; fromlen 是 表示第 5 个参数所指向内容的长度,可以使用 sizeof(struct sockaddr来定义 大小,不过因为是要传给内核协议栈,所以使用了指针类型。 7 发送数据函数 sendto sizeof_t sendto(int sockfd, const void *buf, size_t len, int flag, const struct sockaddr
16、*to, socklen_t tolen; 功能介绍: 千锋教育 中国 IT 职业教育领先品牌 精品课程 全程面授 sendto 函数主要根据填充的接收方的地址信息向客户端或者服务器端发 送数据,接收方的地址信息会提前设置在 struct sockaddr 类型的参数指针中, 当返回值 -1 时,表明发送失败,当返回值大于等于 0 时,表示发送成功,并且 发送数据的大小会通过返回值传递回来。 参数说明: sockfd 是有 socket 创建的文件描述符; buf 是发送数据缓冲区,要发送 的数据会放在这个指针指向的内容空间中;len 是发送缓冲区的大小;to 是一个 struct sockaddr 类型的指针,其指向地址的内容是接收方地址信息;tolen 表 示第 5 个参数指向的数据内容的长度,传递的是值,可以用 sizeof(struct sockaddr计算。 以上就是千锋 Linux 学院的学习笔记。 另附心得体会一篇: 从零基础开始学 Linux 或者是转行学习 Linux,参加培训会保证你在单位时 间内学到更多,毕竟随着 Linux 行业的快速发展,未来必将会面临更多的竞争, 所以只有不遗余力的把自己打造成一把利剑, 从专业度到职业素质
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年AI的双重价值:助力气候正向效应与推动能源转型报告-
- 山东省济南市名校联考2025-2026学年高一上学期1月阶段性检测英语试卷(含答案无听力原文及音频)
- 2025年阳江职业技术学院马克思主义基本原理概论期末考试模拟题及答案解析(必刷)
- 2024年盱眙县招教考试备考题库含答案解析(夺冠)
- 2025年晋宁县招教考试备考题库带答案解析(必刷)
- 2025年雄县招教考试备考题库带答案解析
- 2024年西安航空职工大学马克思主义基本原理概论期末考试题及答案解析(必刷)
- 2025年青县招教考试备考题库附答案解析
- 2024年西南科技大学城市学院马克思主义基本原理概论期末考试题含答案解析(必刷)
- 2024年麻阳苗族自治县招教考试备考题库及答案解析(夺冠)
- 华为幸福心理管理制度
- 2025年农村电商直播基地农业产品上行解决方案报告
- 农村承包土地合同范本
- 吉利汽车开发流程
- 五年级数学下册 分层训练 2.1 因数和倍数 同步练习 (含答案)(人教版)
- 护理部主任年终述职
- 电力行业安全生产操作规程
- 螺杆压缩机PSSR检查表
- GB/T 4937.34-2024半导体器件机械和气候试验方法第34部分:功率循环
- TCALC 003-2023 手术室患者人文关怀管理规范
- 中药热奄包在呼吸系统疾病中的应用研究
评论
0/150
提交评论