网络编程
文章平均质量分 58
lm_123_456
本人热爱学习新技术,有良好的自学能力,热爱编程,有责任心,执行能力强,对待生活积极向上,乐观,为人诚恳,积极接受困难和挑战
展开
-
管道(无名管道)和FIFO(有名管道)
管道是最初的UnixIPC形式,但是因为管道没有名字,所以它们只能用于有亲缘关系的进程使用;进而有名管道(FIFO)应运而生,有名管道有一个路径名与之关联,所以允许无亲缘关系的进程访问同一个FIFO。以下具体介绍管道: 管道的创建:管道由函数 int pipe(int fd[2]) 创建,提供一个单向数据流,该函数返回两个文件描述符,fd[0]和fd[1],前者用来打开读,后者用来打开写。管道原创 2016-05-25 09:55:54 · 546 阅读 · 0 评论 -
线程池网络服务模型
前述: 线程池网络服务是针对多线程网络服务模式的不足而提出的改进模式;其基本理念是先创建一批资源,当有用户到来时,直接分配已经创建的资源;线程池的主要目的是减少系统在频繁创建资源时的开销。线程池网络服务的实现原理: 1> 主服务线程创建的即定数量的服务线程,同时在指定端口进行侦听; 2> 若当前有新连接到来,则从线程池中找出空闲的服务线程,为其服务,服务完毕,线程不进行释放,重新放回线程池;原创 2016-06-01 00:14:01 · 468 阅读 · 0 评论 -
TCP连接的终止(四次挥手)图解
tcp连接的终止过程1> 当客户端的数据流中没有其它要发送的数据时,它将发送带 FIN 标志设置的数据段;2> 服务器发送 ACK 信息,确认收到从客户端发出的请求终止会话的 FIN 信息;3> 服务器向客户端发送 FIN 信息,终止从服务器到客户端的会话;4> 客户端发送 ACK 响应信息,确认收到从服务器发出的 FIN 信息。当会话中的客户端没有要传输的数据时,就会在数据报头中设置FIN原创 2016-06-01 09:25:31 · 3496 阅读 · 0 评论 -
静态函数库与动态函数库(共享库)的创建
静态函数库的创建过程: (1)生成 *.o文件; [root@localhost mine]# ls add.cpp add.h main.cpp sub.cpp sub.h [root@localhost mine]# g++ -o add.o -c add.cpp [root@localhost mine]# ls add.原创 2016-05-19 20:57:45 · 565 阅读 · 0 评论 -
线程的状态----joinable和detached
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有的线程等待转载 2016-05-19 21:52:39 · 13060 阅读 · 1 评论 -
socket之无连接编程(UDP)
UDP是无连接不可靠的数据报协议,UDP的常见应用程序是DNS(域名解析系统),NFS(网络文件系统),SNMP(简单网络管理协议);在使用UDP的客户服务器程序中,客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指出目标服务器的地址;同样,服务器不接受来自客户的连接,而只是用recvfrom等待指定用户的数据到达,recvfrom将与所接收的数据报一起返回客户的协议原创 2016-06-01 16:06:37 · 1710 阅读 · 0 评论 -
socket之面向连接编程(TCP)
面向连接(有连接)编程的网络应用程序的流程固定,只需要创建服务器和客户端两个应用程序,利用网络传输进行通信面向连接的服务器端的流程如下:1> 创建套接字(socket) 2> 服务的绑定(bind) 3> 服务的侦听(listen) 4> 处理新到连接(accept) 5> 数据收发(recv/send) 6> 关闭套接字(close)面向连接的客户端的流程1> 创建客户端套接字(sock原创 2016-06-01 09:47:52 · 2020 阅读 · 0 评论 -
UNIX网络编程之线程浅析
什么是线程:线程是一个进程内部的控制系列;线程是CPU调度的基本单位线程的优点: (1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间的代码。 (2) 多个线程可以自动共享相同的存储地址空间和文件描述符。 (3) 有些问题可以通过将其分解从而改善整个程序的吞吐量。 (4) 交互的程序可以通过使用多线程实现相应时间的原创 2016-05-20 23:51:24 · 432 阅读 · 0 评论 -
reactor 和 proactor 模式的异同点
reactor 和 proactor 都是并发编程中的设计模式,reactor 用于同步IO,而 proactor 用于异步IO。使用reactor和proactor都可以极大的简化网络应用的开发。。接下来对这两种模式的异同点简单分析一下…..Reactor包含如下角色: Handle 句柄;用来标识socket连接或是打开文件;Synchronous Event Demultiplexer:同步原创 2016-08-06 11:04:30 · 450 阅读 · 0 评论 -
网络TCP建立连接为什么需要三次握手而结束要四次
举个打电话的例子: A : 你好我是A,你听得到我在说话吗 B : 听到了,我是B,你听到我在说话吗 A : 嗯,听到了 建立连接,开始聊天!为什么TCP协议终止链接要四次?1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。3、但这是B可能还在发送数据,没有想要关闭转载 2016-09-18 09:13:28 · 275 阅读 · 0 评论 -
多线程网络服务的一般模型
前述: 多线程网络服务类似于多进程网络服务模式, 不同之处是多线程是为新到连接启动一个服务线程,而多进程模式是为新到连接启动一个服务进程。多线程网络服务模式的实现原理: 1> 在主服务线程里进行阻塞式等待,在绑定的端口进行侦听;2> 若当前有连接到来,则启动一个新线程为其服务,服务结束后,释放线程资源;多线程网络服务模式的流程图如下: 多线程网络服务模式的优点: 便捷, 高效;多线程网络服务模原创 2016-05-31 23:34:51 · 550 阅读 · 0 评论 -
多进程的网络服务的一般模型
前述:多进程网络服务模式其实是基于Linux系统提供的父子进程的关系为多用户提供并发服务,是比较受大众喜爱的并发服务技术,其基本的服务理念是来一个客户,就启动一个服务进程!多进程网络服务的实现原理:第一步:>主服务在端进行绑定监听,同时设置被绑定的地址与端口是可重用的(因为可能会有多个进程要在同一个端口进行监听),启动监听;第二步:>若当前有新连接到来,就启动一个子进程与其交互,服务结束后子进程自动原创 2016-05-31 22:25:11 · 497 阅读 · 0 评论 -
进程的相关知识
程序和进程的区别: 程序是静态的,就是我们通常编写的代码 进程是动态的,完成对程序的一次执行,执行完成该进程就over。进程是拥有资源的最小单位linux是用命令来管理进程的,如: ps, at, top, kill, pstree, nice, renice等进程由三个部分组成: 进程控制块(PCB)—->描述和控制进程运行的数据结构;主要包含进程标示符,进程控制和调度信息原创 2016-05-13 23:25:48 · 330 阅读 · 0 评论 -
Linux同步技术之条件变量
条件变量也是Linux中的一种同步技术,不过其一般不单独使用而是要和互斥锁一起配合使用。如果单独使用互斥量的话,很容易发生死锁,所以条件变量为次应运而生^_^ ! 条件变量允许一个线程阻塞和等待另一个线程发送的信号,使用条件变量可以以原子的方式阻塞线程,直到满足某个条件为止,可以避免忙等。条件变量通常和互斥锁一起使用,互斥量主要用来保证对临界区的互斥进入,而条件变量则用于线程的阻塞等待,互斥锁锁定原创 2016-05-26 11:47:05 · 376 阅读 · 0 评论 -
Linux中的同步技术之互斥量
互斥量从本质上说就像是一把锁,提供资源的保护访问,互斥量有两种状态,锁住(lock)与解锁状态(unlock),用来保证一段时间内只有一个线程使用该共享资源。互斥量的数据类型为pthread_mutex_t,如果互斥锁变量是静态分配的,那么一般将其初始化为常值PTHREAD_MUTEX_INITIALIZER, 如:static pthread_mutex_t lock = PTHREAD_MUTE原创 2016-05-26 10:20:53 · 282 阅读 · 0 评论 -
fork函数
fork执行一次产生两个进程:一个子进程和进程本身(父进程) pid = fork(); fork()产生的子进程pid=0(标记子进程创建成功),pid = -1(标记子进程创建失败);**当子进程创建成功后,返回给父进程一个pid号,创建失败后返回给父进程 -1; 当返回 -1 时,父进程仍然有自己的ppid,而子进程创建失败,返回一个errno号,告诉系统子进程是如何创建失败的。#in原创 2016-05-13 21:40:33 · 405 阅读 · 0 评论 -
Linux同步技术之读写锁
互斥锁试图将想进入临界区的所有线程都阻塞住,但是有时候该临界区会涉及由这些线程共享的一个或多个数据的访问或更新,这时候我们就需要用到读写锁。系统读写锁的分配规则: (1)只要有没有线程持有给定的读写锁用于写,那么任意数量的线程可以持有该读写锁用于读。(系统规定写锁优先,但是可以更改为读锁优先) (2)仅当没有线程持有某个读写锁用于读或用于写时,才能分配该读写锁用于写。读写锁用于读称为共享锁,读写原创 2016-05-31 09:01:24 · 1719 阅读 · 0 评论 -
TCP如何实现可靠性
TCP传输控制协议 TCP 协议是一种面向连接的,为不同主机进程间提供可靠数据传输的协议。TCP 协议假定其所使用的网络栈下层协议(如IP 协议)是非可靠的,其自身提供机制保证数据的可靠性传输。在目前的网络栈协议族中,在需要提供可靠性数据传输的应用中,TCP 协议是首选的,有时也是唯一的选择。TCP协议使用的是网络层协议(如IP协议)提供的服务。 网络层协议主要完成对上层协议的数据的传递,但是不原创 2016-05-31 09:46:46 · 1767 阅读 · 0 评论 -
UNIX网络编程:IPC之信号量
信号量: 主要用来控制多个进程对临界资源的互斥访问,进程通过信号量来判断是否有可以访问的资源,信号量是一种同步机制信号是一种处理异步事件的方法; 不同于信号量信号量是一个计数器可用于同步多进程对共享数据对象的访问;要获得共享资源,进程需要:(1)测试控制该资源的信号量; (2)若此信号量值为正, 则进程可以使用该资源,进程将信号量值减一,表示进程使用了一个资源单位; (3)若此信号量值为0, 则原创 2016-05-17 01:11:57 · 498 阅读 · 0 评论 -
UNIX网络编程: IPC之共享内存
共享内存:是系统创建的特殊地址空间,允许不相干的多个进程使用该空间,即多个进程能够使用同一块内存的数据;优点: 共享内存不需要复制数据,直接读写内存,效率非常高; 缺点: 但是它本身不提供同步访问机制,我们可以通过信号量来进行控制其同步访问机制;共享内存的操作函数如下: shmget int shmget(key_t key,int shmsz,int shmflg) 该函数创建或访问原创 2016-05-16 23:05:34 · 354 阅读 · 0 评论 -
UNIX网络编程:IPC之消息队列
消息队列:将消息队列按队列的方式组织成的链表,每个消息都是其中的一个节点; 注意:消息队列的长度及每个消息的大小是有限制的消息队列的操作函数如下: msgget int msgget(key_t key,int msgflg); 该函数作用是:创建一个消息队列或访问一个已经存在的消息队列;成功返回标示符,出错返回-1; 其第一个参数是一个整数IPC键,由ftok函数产原创 2016-05-16 21:13:19 · 796 阅读 · 0 评论 -
linux进程间通讯的几种方式的特点和优缺点,和适用场合。
http://blog.csdn.net/kakaka2011/article/details/66366611. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 信号量( semophor转载 2016-08-27 09:16:08 · 1947 阅读 · 0 评论