linux教程 第09课_网络编程

linux教程 第09课_网络编程

ID:43196623

大小:183.00 KB

页数:21页

时间:2019-10-02

linux教程 第09课_网络编程_第1页
linux教程 第09课_网络编程_第2页
linux教程 第09课_网络编程_第3页
linux教程 第09课_网络编程_第4页
linux教程 第09课_网络编程_第5页
资源描述:

《linux教程 第09课_网络编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第5章Linux内核简介5.8网络系统在Linux网络中,网络数据从用户进程传输到网络设备需要经历四个层次5.8.1socket一个套接字就是与网络的一个连接socket在逻辑上有三个特征(或要素):(1)网域。它表明一个插口用于哪一种网络。(2)类型。它表明在网络中通信所遵循的模式。网络通信中有两种主要的模式,一种称为“有连接”模式,一种称为“无连接”模式。(3)协议。它表明具体的网络规程。套接字的三种类型套接字有三种类型:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字。1.流式套接字(SOCK_STREAM

2、):可靠的、面向连接的通讯流。它使用了TCP,保证了你的数据传输是正确的,并且是顺序的。2.数据报套接字(SOCK_DGRAM):定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。它使用使用者数据报协议UDP(UserDatagramProtocol)3.原始套接字:主要用于一些协议的开发,可以进行比较底层的操作。它功能强大,但是没有上面介绍的两种套接字使用方便,一般的程序也涉及不到原始套接字。5.8.2网络分层结构socket描述符在Linux系统中,任何对I/O的操作,都是通过读或写一个文件描述符来实现的。

3、一个文件描述符只是一个简单的整形数值,代表一个被打开的文件。socket是一个网络文件描述符——首先调用系统函数socket(),返回一个套接字socket描述符,然后就可以通过对这个套接字描述符进行一些操作:系统函数send()和recv()。事实上,write()和read()也可以对套接字描述符进行操作的,但是使用send()和recv()函数可以对网络数据的传输进行更好的控制。socket数据结构structsockaddr{unsignedshortsa_family;/*地址家族,AF_xxx*/charsa_data[14];/*14字

4、节协议地址*/};sa_family能够是各种各样的类型,一般都是“AF_INET”。sa_data包含套接字中的目标地址和端口信息。structsockaddr_in("in"代表"Internet"。)structsockaddr_in{shortintsin_family;/*通信类型*/unsignedshortintsin_port;/*端口*/structin_addrsin_addr;/*Internet地址*/unsignedcharsin_zero[8];/*与sockaddr结构的长度相同*/};用这个数据结构可以轻松处理套接字地

5、址的基本元素。一定要保证sin_port和sin_addr必须是网络字节顺序基本转换函数通常使用的整数有两种数据类型:短型(两个字节)和长型(四个字节)。如果你想将一个短型数据从主机字节顺序转换到网络字节顺序的话,有这样一个函数:它是以“h”开头的(代表“主机”);紧跟着它的是“to”,代表“转换到”;然后是“n”代表“网络”;最后是“s”,代表“短型数据”。H-to-n-s,就是htons()函数。htons()——“HosttoNetworkShort”主机字节顺序转换为网络字节顺序(对无符号短型进行操作4bytes)htonl()——“Host

6、toNetworkLong”主机字节顺序转换为网络字节顺序(对无符号长型进行操作8bytes)ntohs()——“NetworktoHostShort“网络字节顺序转换为主机字节顺序(对无符号短型进行操作4bytes)ntohl()——“NetworktoHostLong“网络字节顺序转换为主机字节顺序(对无符号长型进行操作8bytes)IP地址转换函数:inet_addr(),把一个用数字和点表示IP地址的字符串转换成一个无符号长整型。ina.sin_addr.s_addr=inet_addr(“166.111.69.52”);注意:inet_ad

7、dr()返回的地址已经是网络字节顺序了。函数inet_ntoa()(“ntoa”代表“NetworktoASCII”):printf(“%s”,inet_ntoa(ina.sin_addr));这段代码将会把structin_addr里面存储的网络地址以数字.数字.数字.数字的格式显示出来。inet_ntoa()返回一个字符指针,它指向一个定义在函数inet_ntoa()中的static类型字符串。所以每次你调用inet_ntoa(),都会改变最后一次调用inet_ntoa()函数时得到的结果。socket编程支持socket编程的常用函数:sock

8、et()函数bind()函数connect()函数listen()函数accept()函数send()和re

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。