Linux socket网络编程基础

上传人:小*** 文档编号:118584414 上传时间:2022-07-12 格式:PPT 页数:39 大小:613KB
收藏 版权申诉 举报 下载
Linux socket网络编程基础_第1页
第1页 / 共39页
Linux socket网络编程基础_第2页
第2页 / 共39页
Linux socket网络编程基础_第3页
第3页 / 共39页
资源描述:

《Linux socket网络编程基础》由会员分享,可在线阅读,更多相关《Linux socket网络编程基础(39页珍藏版)》请在装配图网上搜索。

1、Linux高级程序设计(第2版)Linux高级程序设计(第二版)人民邮电出版社出版杨宗德编著2009年9月Linux高级程序设计(第2版)第12章Linux socket网络编程基础 网络通信基础网络通信基础 BSD Socket TCP网络通信编程网络通信编程BSD Socket UDP网络通信编程网络通信编程使用使用TCP实现简单聊天程序实现简单聊天程序Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著3OSI模型及TCP/IP协议模式 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著4TCP/IP体系结构及各层协议 Linux高级

2、程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著5IP地址分类 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著6IP地址划分 类别前8位(二进制)点分十进制第一字节范围默认子网掩码广播地址网络数A0XXXXXXX1126(127为回环地址)255.0.0.0X.255.255.255126B10XXXXXX128191255.255.0.0X.X.255.25516384C110XXXXX192223255.255.255.0X.X.X.2552097152D1110XXXX224239N/AN/AN/AE1111XXXX240254N/AN/A

3、N/ALinux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著7网络数据包封包与拆包过程 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著8数据包接收拆包分类流程 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著9以太网链路层数据帧格式 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著10IP数据包头 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著11TCP包头 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著12UDP数

4、据包头 Linux高级程序设计(第2版)第12章Linux socket网络编程基础 网络通信基础网络通信基础 BSD Socket TCP网络通信编程网络通信编程BSD Socket UDP网络通信编程网络通信编程使用使用TCP实现简单聊天程序实现简单聊天程序Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著14类比电话通信,面向连接的socket通信实现 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著15通信过程首先,服务器端需要做以下准备工作:(1)调用socket()函数。建立socket对象,指定通信协议。(2)调用bind

5、()函数。将创建的socket对象与当前主机的某一个IP地和端口绑定。(3)调用listen()函数。使socket对象处于监听状态,并设置监听队列大小。客户端需要做以下准备工作:(1)调用socket()函数。建立socket()对象,指定相同通信协议。(2)应用程序可以显式的调用bind()函数为其绑定IP地址和端口,当然,也可以将这工作交给TCP/IP协议栈。接着建立通信连接:(1)客户端调用connect()函数。向服务器端发出连接请求。(2)服务端监听到该请求,调用accept()函数接受请求,从而建立连接,并返回一个新的socket文件描述符专门处理该连接。然后通信双方发送/接收数

6、据:(1)服务器端调用write()或send()函数发送数据,客户端调用read()或者recv()函数接收数据。反之客户端发送数据,服务器端接收数据。(2)通信完成后,通信双方都需要调用close()或者shutdown()函数关闭socket对象。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著16BSD Socket网络编程API socketLinux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著17Socket参数说明第一个参数用来指明此socket对象所使用的地址簇或协议簇.Linux高级程序设计(第2版)2022-7-12人民

7、邮电出版社出版杨宗德编著18Socket参数说明第二个参数为socket的类型。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著19BSD Socket网络编程API bind完成此步,该socket拥有了本地IP地址,端口,通信协议,不能接收客户端的请求,但可以向服务器发起连接。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著20Bind参数说明第二个参数是一个指向sockaddr结构的指针。struct sockaddr只是提供地址类型规范,根据不同的应用,sockaddr需要选用不同的类型。Linux高级程序设计(第2版)202

8、2-7-12人民邮电出版社出版杨宗德编著21地址结构体定义-UNIX域套接字 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著22地址结构体定义-IPV4 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著23端口与IP地址Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著24BSD Socket网络编程API listen第一个参数是绑定了IP及端口信息的socket文件描述符。第二个参数为请求排队的最大长度。当有多个客户端程序和服务器端相连时,此值表示可以使用的处于等待的队列长度。listen 函数将绑定

9、的socket文件描述符变为监听套接字,完成此步:服务器已经准备接收客户端连接请求了。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著25BSD Socket网络编程API客户端发起连接 connect其第一个参数为socket返回的文件描述符。第二个参数储存了服务器端的地址(包括服务器的IP地址和端口信息)。第三个参数为该地址的长度。如果执行成功,此函数将与地址为addr的服务器建立连接,并返回0,如果失败则返回-1。正确完成此步:客户端socket拥有了目的IP,端口信息。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著26BSD

10、 Socket网络编程API服务器接收连接 accept 第一个参数是监听网络后的socket文件描述符。第二参数为struct sockaddr 类型的地址空间首地址,第三个参数为该段地址空间长度,因此第二个参数用来存储客户端的IP地址和端口信息,以便为客户端返回数据。需要注意的是,如果执行成功,此函数将返回一个新的文件描述符以标识该连接,从而使原来的文件描述符可以继续等待新的连接,这样便可以实现多客户端。如果执行失败,将返回-1。至此,两端的连接已经建立,而服务器端又是如何区别多个连接的呢?Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著27如何区分多个客户端

11、对于任何一个TCP连接,最重要的信息包括源IP:源端口,目的IP:目的端口四个信息。例如,客户机192.168.0.10/24的3000、4000两端口同时向服务器192.168.0.100/24的80端口发起两个连接,在服务器端是如何区别两个连接的呢?Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著28BSD Socket网络编程API读/写socket Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著29BSD Socket网络编程APIsend/recv第一个参数为发送的目标socket对象;第二个参数为欲发送的数据位置;第三个

12、参数为数据的大小;第四个参数操作flags,支持的值为0或MSG_OOB(发送带外数据)等。对套接字调用write()的行为与将flags设置为0的send()的行为完全相同。如果执行成功,此函数将返回发送数据的大小,如果失败,将返回-1。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著30BSD Socket网络编程API 关闭socket对象 close/shutdownhowto=0这个时候系统会关闭读通道,但是可以继续往socket描述符中写。howto=1关闭写通道,和上面相反,此时只可以读。howto=2关闭读写通道,和close一样,在多进程程序里,

13、当几个子进程共享一个套接字时,如果使用shutdown,那么所有的子进程都将不能操作,这时只能使用close()函数来关闭子进程的套接字描述符。Linux高级程序设计(第2版)第12章Linux socket网络编程基础 网络通信基础网络通信基础 BSD Socket TCP网络通信编程网络通信编程BSD Socket UDP网络通信编程网络通信编程使用使用TCP实现简单聊天程序实现简单聊天程序Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著32面向无连接通信模型 Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著33BSD Socke

14、t网络编程API sendto/recvfrom 第一个参数为发送的目标socket对象。第二个参数为欲发送的数据信息。第三个参数为发送数据的大小。第四个参数为flags,如send函数所示。第五个参数欲发送数据的目标地址,其结构体前面已经介绍。第六个参数为此结构体的大小。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著34BSD Socket网络编程API getsockname/getpeername获得一个套接字(这个套接口至少完成了绑定本地IP地址)的本地地址。如果成功则返回0,如果发生错误则返回-1。第1个参数为欲读取信息的socket文件描述符第2,3

15、个参数分别为存储地址的内存空间地址和大小。getpeername()函数将取得一个已经连接上的套接字的远程信息(比如IP 地址和端口)。Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著35应用示例使用 AF_UNIX实现本机数据流通信示例 见代码使用AF_INET实现UDP点对点通信示例 见代码Linux高级程序设计(第2版)第12章Linux socket网络编程基础 网络通信基础网络通信基础 BSD Socket TCP网络通信编程网络通信编程BSD Socket UDP网络通信编程网络通信编程使用使用TCP实现简单聊天程序实现简单聊天程序Linux高级程序设

16、计(第2版)2022-7-12人民邮电出版社出版杨宗德编著37服务端运行结果(IP地址为192.168.0.93)Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著38客户机运行结果(IP地址为192.168.0.133)Linux高级程序设计(第2版)2022-7-12人民邮电出版社出版杨宗德编著39习题(1)七层模型与TCP/IP协议模型比较,各层完成的基本功能,对应的各层最主要功能是什么?(2)写出你所知道的网络设备、网络协议其简单工作原理描述,并列出其工作在TCP/IP协议栈的哪一层。(3)试写出网络数据的封包与拆包过程。并分析说明TCP、IP、UDP数据包头信息。(4)IP地址的如何区分,A、B、C类地址范围,哪些地址是私有地址,能够实现子网合并和拆分。子网掩码是什么,怎样计算一台主机的网络ID和主机ID。将192.168.0.1/24网段划分成8个子网,写出网络ID,主机ID范围,广播地址,子网掩码。(5)为什么办公区的私有IP地址主机可以连接到internet,NAT的功能是什么?

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!