TCP/IP网络编程
文章平均质量分 76
早起的虫儿灬
这个作者很懒,什么都没留下…
展开
-
TCP/IP网路编程之地址族与数据序列
IP地址分为IPv4与IPv6 前者是4字节地址族后者是16字节地址族,两者的差异主要是表示IP地址所使用的字节数IPv4的4字节地址分为网络地址与主机地址,并且分为A、B、C、D、E四种类型说明:A类地址的首字节范围是:0-127B类地址的首字节范围是:128-191C类地址的首字节范围是:192-223或者也可以这样分A类地址的首位是以0开头B类原创 2016-12-09 20:53:30 · 1697 阅读 · 0 评论 -
文件I/O和标准I/O的区别
转自:http://m.blog.csdn.net/article/details?id=51711231一、先来了解下什么是文件I/O和标准I/O:文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或转载 2017-01-05 19:34:49 · 462 阅读 · 0 评论 -
标准I/O库
转自:http://blog.csdn.net/kangroger/article/details/38708297标准的I/O是由ANSI C标准规定的,不仅可以在UNIX/Linux上使用,还可以在其他地方使用。标准I/O库对应文件的操作是围绕流(stream)进行的。当用标准I/O库打开或创建文件时,便使一个流与一个文件相关联。标准I/O库的函数对于文件的描述是基于FILE对象指针的转载 2017-01-05 21:12:55 · 251 阅读 · 0 评论 -
套接字与标准IO及IO流分离
标准I/O的优点1、具有良好的可移植性(遵从ANSI C标准)2、可以利用缓冲避免频繁的系统调用从而提高性能 使用标准I/O编写操作套接字时的缺点1、 可能频繁调用fflush函数(保证I/O缓冲中的数据及时进入套接字输出缓冲)2、 需要将创建套接字时返回的文件描述符转化为FILE指针 将文件描述符转化为FILE指针FILE *fdopen(int fild原创 2017-01-06 08:05:11 · 579 阅读 · 0 评论 -
子进程复制了父进程的什么
转自:http://www.cnblogs.com/zhangchaoyang/articles/2317420.html如果你对代码段、数据段、栈、堆存放哪些数据还不是很清楚,请先看我写和Linux 内存管理。有时会出现父子进程变量的地址一样,但值不一样。看下面代码:#include#include#include#includemain(){ ch转载 2016-12-29 08:15:46 · 313 阅读 · 0 评论 -
优于select的epoll
select与epollselect的缺点1、在linux系统下单个进程能打开的文件描述符的最大数量有限制(#define __FD_SETSIZE 1024)2、事件发生后需要遍历注册的所有对象的集合(必须遍历才能知道是谁发生了事件)3、在每次调用select函数时都要向内核拷贝(注册)需要监视的对象信息(由于函数调用之后会修改描述符的集合,因此再次调用时某些对象相当于相当原创 2017-01-07 13:18:10 · 339 阅读 · 0 评论 -
epoll边缘触发
条件触发(Level Trigger):只要满足事件发生条件就不停触发,直到不满足触发条件(epoll默认触发方式,select()也是条件触发方式)边缘触发(Edge Trigger):从不满足事件发生条件到满足事件发生条件时触发服务器使用边缘触发:1、需要通过errno全局变量判断错误原因,为了访问errno全局变量,需要包含头文件errno.h 2、使用非阻塞式I/O原创 2017-01-07 15:54:29 · 507 阅读 · 0 评论 -
实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
转自:http://www.cnblogs.com/yuuyuu/p/5103744.html一.基本概念 我们通俗一点讲:Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读转载 2017-01-07 16:20:40 · 364 阅读 · 0 评论 -
linux线程
进程:硬盘上的一个静态的程序在内存中动态执行的实例 操作系统分配资源的基本单位 每个进程拥有自己独立的内存空间。 在操作系统下构成单独执行流的单位线程:轻量级进程, 是操作系统调度的最小单元, 线程只能存在于进程中, 进程死亡时其中的线程也会死亡 在进程下构成单独执行流的单位使用进程的优势:(1)CPU时分复用,单核心CPU可以实现宏观上的并原创 2017-01-08 12:15:43 · 233 阅读 · 0 评论 -
linux线程同步
0 概述 所谓同步,就是给多个线程规定一个执行的顺序(或称为时序),要求某个线程先执行完一段代码后,另一个线程才能开始执行。 第一种情况:多个线程访问同一个变量: 1. 一个线程写,其它线程读:这种情况不存在同步问题,因为只有一个线程在改变内存中的变量,内存中的变量在任意时刻都有一个确定的值; 2. 一个线程读,其它线程写:这种情况会存在同步问题,主要是多个线程在同时写原创 2017-01-08 17:13:21 · 548 阅读 · 0 评论 -
TCP/IP网络编程之TCP
TCP字节流与UDP数据报的区别参考链接 http://www.linuxidc.com/Linux/2014-11/109545.htmTCP/IP协议栈分为四层链路层物理链接领域标准化结果。若两台计算机通过网络进行数据交换,链路层就负责整个物理连接。网络层(IP层)负责在复杂的网络中传输数据时的路径的选择,但是IP本身是面向消息的、不可靠的协议。每次传输数据原创 2016-12-10 16:35:50 · 508 阅读 · 0 评论 -
TCP原理简单描述
TCP套接字中的I/O缓冲套接字中存在缓冲区,在我们调用write与read函数时,并不是立即传输/接收数据,而是调用瞬间将数据移至输出缓冲区,或从输出缓冲区读取数据(有多少读多少)调用write后被移动到缓冲区的数据在适当的时候传向(不管是一次传送还是多次传送)对方的输入缓冲区,这时对方的read函数开始从其输入缓冲区读取数据注意:函数write与windows中的send函数在原创 2016-12-16 23:41:14 · 768 阅读 · 0 评论 -
TCP/IP网络编程之UDP
UDP套接字:1、 在结构上比TCP简洁UDP不会发送ack应答消息、不会分配seq UDP编程上比TCP简单3、虽然UDP缺少流控制机制,可靠性比不上TCP,但也不像想象中那么频繁的发生数据丢失与损毁4、在重视性能而非可靠性的情况下,UDP是一种很好的选择5、TCP的速度无法超过UDP,但是在收发某些类型的数据时有可能接近UDP,如每次交换的数据量越大,TCP的传输速率就越接近原创 2016-12-21 08:31:41 · 552 阅读 · 0 评论 -
多播与广播
多播:向加入特定组的大量主机以UDP的方式同时传送数据 特点:1、发送方只针对特定多播组发送一次数据2、在特定多播组内所有接受者都会收到发往改组的数据3、组数在IP(组播属于D类IP)地址范围内任意增加4、基于UDP完成,多播数据包格式与UDP数据包相同5、借助路由完成数据包的复制、传输(到主机) 设置TTL与加入多播组要向使用多播必须设置TTL,TTL决定原创 2017-01-05 00:20:28 · 298 阅读 · 0 评论 -
TCP粘包原因与解决
流协议与粘包粘包的表现Host A 发送数据给 Host B; 而Host B 接收数据的方式不确定粘包产生的原因说明TCP字节流,无边界对等方,一次读操作,不能保证完全把消息读完UDP数据报,有边界对方接受数据包的个数是不确定的转载 2016-12-27 23:25:58 · 577 阅读 · 0 评论 -
简单的计算器服务器端/客户端程序
//应用层协议//客户端连接到服务器端后以1字节整数形式穿肚运算数个数//客户端向服务器端传递的每个待算整数占4字节//传递待算数后传递运算符,运算符占1字节//选择字符+、-、*之一传递//服务器端以4字节整数形式向客户端传输运算结果//客户端得到结果后终止与服务器端的连接客户端代码#include #include #include #include原创 2016-12-16 21:03:07 · 2029 阅读 · 0 评论 -
TCP/IP网络编程之套接字
服务器端套接字创建过程:(1)调用socket函数创建套接字,得到套接字文件描述符(Linux下称呼)/套接字句柄(Windows下称呼)(2)调用bind为套接字分配IP与地址与端口号(3)调用listen函数将套接字转化为可接收连接的状态(4)调用accept函数受理连接请求客户端套接字创建过程:(1)调用socket函数创建套接字(2)调用conne函数先服务器端原创 2016-12-05 15:08:53 · 599 阅读 · 0 评论 -
进程与多进程服务器
进程占用内存空间的正在运行的程序(躺在硬盘里的是程序,被加载器加载到内存中运行后,正在运行的是进程)补充:拥有2个运算设备的CPU称作双核CPU,拥有4个运算器的CPU称作4核。核的个数与可同时运行的进程数相同。相反,若进程数超过核数,进程将分时使用CPU资源。只是因为CPU运行速度极快,我们会感觉所有进程同时运行而已(宏观上并行,微观上串行)。 进程ID 所有进程在创建时,操原创 2016-12-29 01:24:53 · 332 阅读 · 0 评论 -
I/O复用
多进程与I/O复用之前为了构建并发服务器,采用多进程的方式,一旦有客户端连接就会创建新进场,但由于创建新进场需要耗费大量的CPU资源与内存资源,且进程之间拥有完全独立的内存空间,还需要使用IPC;I/O复用则不需要创建多个进程,采用事件监听的方式,一旦事件发生了才去处理I/O复用https://www.zhihu.com/question/32163005/answer/55772739原创 2017-01-03 19:13:28 · 304 阅读 · 0 评论 -
accept()返回的套接字绑定哪个端口 新旧套接字的联系
摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。accept函数等待并接受客户请求:#includeint accept(int sockfd, struct sockaddr* add转载 2016-12-25 15:05:18 · 1393 阅读 · 0 评论 -
accept函数
转自:http://ticktick.blog.51cto.com/823160/779866今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原转载 2016-12-25 15:33:49 · 728 阅读 · 0 评论 -
域名与IP地址
域名系统DNS(Domain Name System )IP地址是难以记忆与表述的,所以使用域名取代IP地址域名是赋予服务器的虚拟地址,DNS服务器负责将虚拟地址(域名)转化为实际地址(IP地址)所有计算机中都记录着默认DNS服务器地址,通过默认的DNS服务器获得域名的相应IP地址信息,默认DNS服务器不可能知道所有的域名的IP地址,当默认DNS收到无法解析的请求时,会向上级DNS服务原创 2016-12-26 00:13:51 · 601 阅读 · 0 评论 -
send_recv_writev_readv
send与recv原型:ssize_t send(int sockfd, const void *buf,size_t nbytes, int flags); ssize_t recv(int sockfd, const void *buf,size_t nbytes, int flags); 最后一个参数可取值MSG_OOB 发送/接收带外数据(out-原创 2017-01-04 06:30:49 · 495 阅读 · 0 评论 -
套接字的多种可选项
套接字的可选项levelOptnamegetset说明标志数据类型SOL_SOCKETSO_BROADCASTyy允许发送广播数据报yint原创 2016-12-26 07:56:30 · 451 阅读 · 0 评论 -
TCP_NODELAY详解
转自:http://bbs.chinaunix.net/thread-3767363-1-1.html在网络拥塞控制领域,我们知道有一个非常有名的算法叫做Nagle算法(Nagle algorithm),这是使用它的发明人John Nagle的名字来命名的,John Nagle在1984年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题(RFC 896),该问题的具体描述是:如果我们转载 2016-12-26 21:11:30 · 441 阅读 · 0 评论 -
有代表性的并发服务器端模型
如果服务器不能并发,那么排在后面的客户端将会等待,直到前面的客户端的服务请求被一一处理完毕,而且网络程序中数据通信时间比CPU运算时间占比更大,因此,向多个客户端提供服务是一种有效利用CPU的方式有代表性的并发服务器端模型::1、多进程服务器:通过创建多个进程来同时提供服务2、多路复用服务器:通过捆绑并统一管理I/O对象提供服务3、多线程服务器:通过生成与客服端等量的线程提供服原创 2016-12-26 21:33:50 · 205 阅读 · 0 评论 -
TCP与应用层协议
TCP层与UDP层建立在IP之上,以IP层为基础进行数据传输,也就是说TCP与UDP还是通过一个个的IP包来进行传输的,虽然IP层只关心一个数据包(基本单位)的传输过程,但IP并不能保证数据包能安全的被送达,一旦丢失IP也无能为力,TCP在IP的基础上加上了对传输过程进行流控制,增加了一系列保证传输可靠的机制。1、给每个IP包分配序号sep,同时,保证接收端在接收到序号为seq的IP包时回复A原创 2016-12-27 22:40:07 · 2224 阅读 · 0 评论 -
基于TCP的半关闭
基于TCP的半关闭TCP练级的半关闭简而言之就是”关闭连接的一半”(只可以传递或接收数据) 套接字和流两台主机通过套接字建立连接后进入可交换数据的状态(流形参的状态),即将建立套接字后可交换数据的状态看做一种流套接字的流中,数据只能向一个方向移动,因此需要两个流进行双向通信(建立连接后的主机将拥有单独的输入流与输出流这两个相互独立的流,这两个流与连接上的另一个主机的输出流与输入原创 2016-12-22 07:17:07 · 1874 阅读 · 0 评论