《LINUX网络编程.ppt》由会员分享,可在线阅读,更多相关《LINUX网络编程.ppt(47页珍藏版)》请在人人文库网上搜索。

1、LINUX网络编程,行业事业部 黄文举 2010.10.26,套接口,在Linux下,所有的I/O操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,而套接口就是系统进程和文件描述符通信的一种方法,目前最常用的套接口:字节流套接口和数据报套接口、原始套接口。,TCP套接口,TCP套接口使用TCP建立连接,建立一个TCP连接需要三次握手,基本过程是服务器先建立一个套接口并等待客户端的连接请求;当客户端调用 connect进行主动连接请求时,客户端TCP发送一个SYN,告诉服务器客户端将在连接中发送的数据的初始序列号;当服务器收到这个SYN后也给客户端发一个SYN,里面包。

2、含了服务器将在同一连接中发送的数据的初始序列号;最后客户在确认服务器发的SYN。到此为止,一个TCP连接被建立。,UDP套接口,UDP套接口 UDP套接口是无连接的、不可靠的数据报协议;既然它不可靠为什么还要用呢?其一:当应用程序使用广播或多播是只能使用UDP协议;其二:由于他是无连接的,所以速度快。因为UDP套接口是无连接的,如果一方的数据报丢失,那另一方将无限等待,解决办法是设置一个超时。 在编写UDP套接口程序时,有几点要注意:建立套接口时socket函数的第二个参数应该是SOCK_DGRAM,说明是建立一个UDP套接口;由于 UDP是无连接的,所以服务器端并不需要listen或acce。

3、pt函数;当UDP套接口调用connect函数时,内核只记录连接放的IP地址和端口,并立即返回给调用进程,SOCKET的位置,应用层程序,TCP,UDP,IP,数据链路层及物理层,流式套 接口,数据报 套接口,原 始 套 接 口,网络函数及用法,socket函数:为了执行网络输入输出,一个进程必须做的第一件事就是调用socket函数获得一个文件描述符。 #include #include int socket(int family,int type,int protocol); 返回:非负描述字成功-1失败,网络函数及用法,connect函数:当用socket建立了套接口后,可以调用conne。

4、ct为这个套接字指明远程端的地址。 #include #include int connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen); 返回:0成功-1失败,网络函数及用法,bind函数:为套接口分配一个本地IP和协议端口。 #include #include int bind(int sockfd,const struct sockaddr * myaddr,socklen_t addrlen); 返回:0成功-1失败,网络函数及用法,listen函数:listen函数仅被TCP服务器调用,它的作用是将用s。

5、ocket创建的主动套接口转换成被动套接口,并等待来自客户端的连接请求。 #include int listen(int sockfd,int backlog); 返回:0成功-1失败,网络函数及用法,accept函数:accept函数由TCP服务器调用, 从已完成连接队列头返回一个已完成连接,如果完成连接队列为空,则进程进入睡眠状态。 int accept(int sockfd,struct sockaddr * cliaddr,socklen_t * addrlen); 返回:非负描述字成功-1失败,网络函数及用法,connect函数: connect函数是客户端用来同服务端连接的.成功时。

6、返回0,sockfd是同服务端通讯的文件描述符,失败时返回-1. int connect(int sockfd, struct sockaddr * serv_addr,int addrlen) sockfd:socket返回的文件描述符. serv_addr:储存了服务器端的连接信息.其中sin_add是服务端的地址 addrlen:serv_addr的长度 返回:非负描述字成功-1失败,网络函数及用法,inet_pton函数:将点分十进制串转换成网络字节序二进制值,此函数对IPv4地址和IPv6地址都能处理。 int inet_pton(int family,const char * st。

7、rptr,void * addrptr); 返回:1成功 0输入不是有效的表达格式 -1失败,网络函数及用法,inet_ntop函数:和inet_pton函数正好相反,inet_ntop函数是将网络字节序二进制值转换成点分十进制串。 const char * inet_ntop(int family,const void * addrptr,char * strptr,size_t len); 返回:指向结果的指针成功 NULL失败,网络理论,数据进入协议栈时的封装过程,封装,当应用程序用TCP传送数据时,数据被送入协议栈中,然后 逐个通过每一层直到被当做一串比特流送入网络。其中每一层对收到的。

8、数据都要增加一些首部的信息(有时还要增加尾部信息),此过程为封装。 UDP和TCP数据基本一致。唯一不同的是UDP传给IP的信息单元称作UDP数据报,而且UDP的首部长度为8字节。,以太网数据帧的分用过程,网络理论,分用 当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上,同时去掉各层协议加上的报文首部。每层协议盒都要去掉检查报文首部中的协议标识,以确定接收数据的上层协议,这个过程就是分用。,面向连接的C/S 程序的工作流程(TCP),面向连接的C/S 程序的工作流程(TCP),面向连接的C/S 程序的工作流程图(TCP),无连接的C/S 程序的工作流程(UDP),无连接的C/S 。

9、程序的工作流程(UDP),无连接的C/S 程序的工作流程图(UDP),UDP服务器端,UDP客户端,TCP服务器端,TCP客户端,输入输出模型,LINUX的输入输出主要有4种模型: 阻塞式、非阻塞式、多路复用和信号驱动,阻塞式的输入/输出,在套接字上执行以下4种函数调用会阻塞 a.读操作:read、readv、recv、 recvfrom和recvmsg 这些操作的过程如图a-1所示(以read为例),阻塞式的读操作过程,阻塞式的写操作过程,b.写操作:write、writev、send、sendto和sendmsg 这些操作的过程如图b-1所示(以write为例),阻塞式的写操作过程,阻塞式。

10、的接收连接:accept,c. TCP套接字接收连接:accept 函数accept的执行过程如图c-1所示,阻塞式的接收操作过程,阻塞式的连接:connect,d. 建立连接connect,操作过程如图d-1所示,阻塞式输入/输出优缺点,优点:编程模型清晰,结构简单,通信双方比较容易保持同步 缺陷:进程可能永远阻塞、进程的效率比较低,非阻塞式输入输出,在一个非阻塞式套接字上进行输入/输 出操作时,如果操作不能完成,那么操作 将以错误返回。图1-1描述了在非阻塞式套 接字进行读操作的过程。,非阻塞式的读操作过程,非阻塞式读、写、接收、连接,(1)读操作,如果套接字接收缓冲区没有数据,函数将以错。

11、误(EWOULDBLOCK)返回。 (2)写操作,如果发送缓冲区中没有空间,函数以错误(EWOULDBLOCK )返回。 (3)接收连接操作,如果没有新的连接,函数也是错误( EWOULDBLOCK )返回 (4)连接操作,函数将启动TCP 协议3次握手过程,但是不等待连接的建立,而是立即以错误返回,错误类型为EINPROGRESS。,设置非阻塞套接字,两种方法: (1)函数fcntl,操作如下: int flags; flag = fcntl(sockfd,F_GETFL,0); fcntl(sockfd,F_SETFL,flag|O_NONBLOCK); (2)函数ioctl,操作如下: 。

12、int on = 1; ioctl(sockfd,FIONBIO,多路复用输入/输出,多路复用输入/输出综合了阻塞与非阻塞式输入输出的优点。使用函数seclect可以同时检查多个描述符是否就绪。当有描述符就绪时,函数seclet成功返回。图3-1描述了输入输出多路复用模型。,多路复用select操作过程,信号驱动输入输出模型,图4-3 信号驱动通信过程,信号驱动输入输出模型,在一个套接字上使用信号驱动输入/输出时,需要执行以下几步操作: (1)为信号SIGIO建立一个信号处理函数 (2)设置套接字的所有者 (3)允许这个套接字进行信号驱动输入/输出,小结,讨论套接字的4种输入/输出方式: 阻塞式套接字:编程模型简单,单效率不高 非阻塞套接字:效率比较高,进程永远不会阻塞,但是编程模型复杂 套接字多路复用:理想的编程方式 信号驱动:效率高,但增加了编程的难度,谢谢。

linux网络编程 ppt,LINUX网络编程.ppt相关推荐

  1. linux c语言 ppt,linux操作系统下c语言编程入门.ppt

    linux操作系统下c语言编程入门.ppt Linux操作系统下C语言编程入门 CNT Linux操作系统简介基础知识进程介绍文件操作时间概念消息管理线程操作网络编程Linux下C开发工具介绍 一 L ...

  2. linux shell编程 ppt,Linux常用命令与Shell基本编程.ppt

    Linux常用命令与Shell基本编程.ppt Shell 脚本基本编程,无线产品部 katanazhang 2009-11-09,课程目标,linux 常用命令 shell 脚本编程 awk 的用法 ...

  3. linux 网络编程 ping,Linux 网络编程基础(4) -- Ping 的C代码实现

    1.背景 在进行网络编程的时候,通常使用的协议有TCP协议,UDP协议.这些协议在简历套接字之初需要制定套接字的类型,比如TCP应当设置为 SOCK_STREAM, UDP对应的套接字应当设置为SOC ...

  4. 【Linux网络编程】TCP网络编程中connect listen和accept三者之间的关系

    00. 目录 文章目录 00. 目录 01. TCP服务端和客户端流程 02. connect函数 03. listen函数 04. 三次握手 05. accept函数 06. 附录 01. TCP服 ...

  5. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三 ...

  6. IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

    马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培 ...

  7. C++教程网之Linux网络编程视频 Unix网络编程视频

    教程非常不错,价值280元,绝对是干货 Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章. Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 ...

  8. 网络编程二-LINUX网络IO模型

    目录 前言:网络编程里通用常识 一.同步和异步与阻塞和非阻塞 同步和异步 阻塞和非阻塞 两者的组合 二.五种I/O模型 阻塞I/O模型 非阻塞IO模型 IO复用模型 信号驱动IO 异步IO模型 5个I ...

  9. linux c++编程教程,Linux下的C++编程入门教程.ppt

    <Linux下的C++编程入门教程.ppt>由会员分享,可在线阅读,更多相关<Linux下的C++编程入门教程.ppt(14页珍藏版)>请在人人文库网上搜索. 1.Linux下 ...

  10. linux下C语言socket网络编程简例

    转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...

最新文章

  1. 杀死多余的ghost 的Android emulator-5554 offline 的方法总结
  2. 函数计算新功能-----支持C#函数
  3. 模拟键盘输入的keycode
  4. window.addeventlistener 不能调用方法_方法入门(基础篇五)
  5. 自定义应用Crash时系统显示的对话框
  6. 两个字符串的删除操作Python解法
  7. redhat 9.0 mysql 配置_RedHat 9.0下Apache+PHP+MySQL服务器安装配置
  8. webclient无法获取html文件,C# WebClient获取网页源码的方法
  9. [导入]关于OllyDbg 2.0的消息..
  10. 华为nova4是不是鸿蒙系统,华为nova 4手机什么时候可以升级鸿蒙系统?鸿蒙系统nova4升级时间介绍...
  11. Android.mk宏定义demo【转】
  12. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读
  13. centos 配置subversion svn
  14. 数字电路基础知识(三) 复位设计-异步复位,同步释放
  15. 看了这个你也可以做SYSLINUX启动光盘
  16. BLOB/TEXT column 'name' used in key specification without a key length
  17. 计算机比赛小组名称和口号,竞赛小组队名和口号
  18. 计算机电脑使用基础知识!
  19. 在外包干了几年,感觉自己都快费了
  20. 银河系创投徐芳:专注B2B这片热土,燃起产业新势能

热门文章

  1. 95%的区块链从业者将离开,80%的矿场将倒闭,行业大寒来临
  2. GIS与地质灾害评价——缓冲区分析
  3. 苹果电脑python下载安装教程-Anaconda3 Mac版下载
  4. 【学术渣杂谈】CCF-A类会议汇总(人工智能方向)
  5. 《高等工程数学》吴孟达版 第三章部分课后习题解答
  6. 收款云音箱云喇叭API开发接口文档(2020-4-20)
  7. c 调用 java jni_java JNI 的实现(2)-java和C/C++的相互调用.
  8. 360hackgame writeup
  9. laravel 安装guzzlehttp/guzzle
  10. EXSI6.7 虚拟机安装,显卡、USB、键盘直通