LINUX 平台 网络编程.pdf
《LINUX 平台 网络编程.pdf》由会员分享,可在线阅读,更多相关《LINUX 平台 网络编程.pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、网络编程中设计并发服务器,使用多进程网络编程中设计并发服务器,使用多进程网络编程中设计并发服务器,使用多进程网络编程中设计并发服务器,使用多进程 与与与与 多线程多线程多线程多线程,请问有什么区别?,请问有什么区别?,请问有什么区别?,请问有什么区别?答案一:1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进
2、程正相反。同时,线程适合于在 SMP 机器上运行,而进程则可以跨机器迁移。答案二:根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:1。速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。2。资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。3。同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。网络编程网络编程网络编程网络编程,一定离不开套接口一定离不开套接口一定离不开套接口一定离不开套接口;那什么是套接口呢?在那什么是套接口呢?在那什么是套接
3、口呢?在那什么是套接口呢?在 LinuxLinuxLinuxLinux 下下下下,所有的所有的所有的所有的 I/OI/OI/OI/O 操作都是通过读写文件描述操作都是通过读写文件描述操作都是通过读写文件描述操作都是通过读写文件描述符而产生的符而产生的符而产生的符而产生的,文件描述符是一个和打开的文件相关联的整数文件描述符是一个和打开的文件相关联的整数文件描述符是一个和打开的文件相关联的整数文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件这个文件并不只包括真正存储在磁盘上的文件这个文件并不只包括真正存储在磁盘上的文件这个文件并不只包括真正存储在磁盘上的文件,还包
4、括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。目前最常用的套接口是字目前最常用的套接口是字目前最常用的套接口是字目前最常用的套接口是字:字节流套接口字节流套接口字节流套接口字节流套接口(基于基于基于基于 TCP)TCP)TCP)TCP)和数据报套接口和数据报套接口和数据报套
5、接口和数据报套接口(基于基于基于基于 UDP)UDP)UDP)UDP),当然还有原始套接口当然还有原始套接口当然还有原始套接口当然还有原始套接口(原始套原始套原始套原始套接口提供接口提供接口提供接口提供 TCPTCPTCPTCP 套接口和套接口和套接口和套接口和 UDPUDPUDPUDP 套接口所不提供的功能,如构造自己的套接口所不提供的功能,如构造自己的套接口所不提供的功能,如构造自己的套接口所不提供的功能,如构造自己的 TCPTCPTCPTCP 或或或或 UDPUDPUDPUDP 分组分组分组分组)等,我们这里主要介等,我们这里主要介等,我们这里主要介等,我们这里主要介绍字节流套接口和数据
6、报套接口。绍字节流套接口和数据报套接口。绍字节流套接口和数据报套接口。绍字节流套接口和数据报套接口。网络编程,一定离不开套接口;那什么是套接口呢?在 Linux 下,所有的 I/O 操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件,还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。目前最常用的套接口是字:字节流套接口(基于 TCP)和数据报套接口(基于 UDP),当然还有原始套接口(原始套接口提供 TCP 套接口和 UDP 套接口所不提供的功能,如构造自己的 TCP 或 UDP 分
7、组)等,我们这里主要介绍字节流套接口和数据报套接口。要学习网络编程,一定离不开网络库的函数,在 Linux 系统下,可以用man 函数名来得到这个函数的帮助,不过为了照顾 E 文不大好的朋友,下面就将常用的网络函数和用法列出来供大家参考:、socketsocketsocketsocket 函数函数函数函数:为了执行网络输入输出为了执行网络输入输出为了执行网络输入输出为了执行网络输入输出,一个进程必须做的第一件事就是调用一个进程必须做的第一件事就是调用一个进程必须做的第一件事就是调用一个进程必须做的第一件事就是调用 socketsocketsocketsocket 函数获得一个文件函数获得一个文
8、件函数获得一个文件函数获得一个文件描述符。描述符。描述符。描述符。-#include int socket(int family,int type,int protocol);返回:非负描述字成功-1失败-第一个参数指明了协议簇,目前支持5种协议簇,最常用的有 AF_INET(IPv4协议)和 AF_INET6(IPv6协议);第二个参数指明套接口类型,有三种类型可选:SOCK_STREAM(字节流套接口)、SOCK_DGRAM(数据报套接口)和 SOCK_RAW(原始套接口);如果套接口类型不是原始套接口,那么第三个参数就为0。、connectconnectconnectconnect 函数
9、函数函数函数:当用当用当用当用 socketsocketsocketsocket 建立了套接口后建立了套接口后建立了套接口后建立了套接口后,可以调用可以调用可以调用可以调用 connectconnectconnectconnect 为这个套接字指明远程端的地址为这个套接字指明远程端的地址为这个套接字指明远程端的地址为这个套接字指明远程端的地址;如果如果如果如果是字节流套接口,是字节流套接口,是字节流套接口,是字节流套接口,connectconnectconnectconnect 就使用三次握手建立一个连接;如果是数据报套接口,就使用三次握手建立一个连接;如果是数据报套接口,就使用三次握手建立一
10、个连接;如果是数据报套接口,就使用三次握手建立一个连接;如果是数据报套接口,connectconnectconnectconnect 仅指明远程端地址仅指明远程端地址仅指明远程端地址仅指明远程端地址,而不向它发送任何数据。而不向它发送任何数据。而不向它发送任何数据。而不向它发送任何数据。-#include int connect(int sockfd,const struct sockaddr*servaddr,socklen_taddrlen);返回:0成功-1失败-第一个参数是 socket 函数返回的套接口描述字;第二和第三个参数分别是一个指向套接口地址结构的指针和该结构的大小。这些地址
11、结构的名字均已“sockaddr_”开头,并以对应每个协议族的唯一后缀结束。以 IPv4套接口地址结构为例,它以“sockaddr_in”命名,定义在头文件;以下是结构体的内容:-struct in_addr in_addr_t s_addr;/*IPv4地址*/;struct sockaddr_in uint8_t sin_len;/*无符号的8位整数*/sa_family_t sin_family;/*套接口地址结构的地址簇,这里为 AF_INET*/in_port_t sin_port;/*TCP 或 UDP 端口*/struct in_addr sin_addr;char sin_ze
12、ro8;-、bindbindbindbind 函数:为套接口分配一个本地函数:为套接口分配一个本地函数:为套接口分配一个本地函数:为套接口分配一个本地 IPIPIPIP 和协议端口,对于网际协议,协议地址是和协议端口,对于网际协议,协议地址是和协议端口,对于网际协议,协议地址是和协议端口,对于网际协议,协议地址是32323232位位位位 IPv4IPv4IPv4IPv4地址或地址或地址或地址或128128128128位位位位 IPv6IPv6IPv6IPv6地址与地址与地址与地址与16161616位的位的位的位的 TCPTCPTCPTCP 或或或或 UDPUDPUDPUDP 端口号的组合;如指
13、定端口为端口号的组合;如指定端口为端口号的组合;如指定端口为端口号的组合;如指定端口为0 0 0 0,调用,调用,调用,调用 bindbindbindbind 时内核将选择一个临时端口时内核将选择一个临时端口时内核将选择一个临时端口时内核将选择一个临时端口,如如如如果指定一个通配果指定一个通配果指定一个通配果指定一个通配 IPIPIPIP 地址,则要等到建立连接后内核才选择一个本地地址,则要等到建立连接后内核才选择一个本地地址,则要等到建立连接后内核才选择一个本地地址,则要等到建立连接后内核才选择一个本地 IPIPIPIP 地址。地址。地址。地址。-#include int bind(int
14、sockfd,const struct sockaddr*myaddr,socklen_taddrlen);返回:0成功-1失败-第一个参数是 socket 函数返回的套接口描述字;第二和第第三个参数分别是一个指向特定于协议的地址结构的指针和该地址结构的长度。、listenlistenlistenlisten 函数:函数:函数:函数:listenlistenlistenlisten 函数仅被函数仅被函数仅被函数仅被 TCPTCPTCPTCP 服务器调用,它的作用是将用服务器调用,它的作用是将用服务器调用,它的作用是将用服务器调用,它的作用是将用 socksocksocksock 创建的主动套接
15、口转换成被动套创建的主动套接口转换成被动套创建的主动套接口转换成被动套创建的主动套接口转换成被动套接口,并等待来自客户端的连接请求。接口,并等待来自客户端的连接请求。接口,并等待来自客户端的连接请求。接口,并等待来自客户端的连接请求。-#include int listen(int sockfd,int backlog);返回:0成功-1失败-第一个参数是 socket 函数返回的套接口描述字;第二个参数规定了内核为此套接口排队的最大连接个数。由于 listen 函数第二个参数的原因,内核要维护两个队列:以完成连接队列和未完成连接队列。未完成队列中存放的是 TCP 连接的三路握手为完成的连接,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX 平台 网络编程 网络 编程
限制150内