UNIX网络编程读书笔记:TCP输出、UDP输出和SCTP输出

TCP输出下图展示了应用进程写数据到TCP套接口的过程。每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用进程调用write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这通常也是它的默认设置。直到应用进程缓冲区中的所有数据都拷贝到套接口发送缓冲区,内核才会从write系统调用返回。因此,从写一个TCP套接口的write调用成功返回仅仅表示我们可以重新使用应用进程的缓冲区。它并不告诉我们对端的TCP或应用进程已接收到数据。TCP取套接口发送缓冲区的数据并把它发送给对端TCP,其过程基于TCP数据传送的所有规则。对端TCP必须确认收到的数据,只有收到对端的ACK,本端TCP才能删除套接口发送缓冲区中已确认的数据。TCP必须保留数据拷贝直到对端确认为止。UDP输出下图展示了应用进程写数据到UDP套接口的过程。注意,上图中套接口发送给缓冲区用虚线框,...

UNIX网络编程读书笔记:图解TCP端口号和并发服务器

          图1TCP服务器在端口21上执行被动打开                                                       图2客户对服务器的连接请求             ...

UNIX网络编程读书笔记:端口号、套接口对和套接口

端口号端口号(portnumber):16位整数,用来区分不同的进程。服务器使用的端口号:TCP和UDP定义了一组众所周知的端口(well-knownport),用于标识众所周知的服务。客户端使用的端口号:通常使用短期存活的临时端口(ephemeralport)。这些端口号通常由传输层协议自动赋予客户。客户一般不关心其临时端口的具体值,而只需确信它在所在主机中是唯一的就行。传输层协议的代码确保这种唯一性。端口号被划分成三段:(1)众所周知的端口为0-1023.这些端口由IANA分配和控制。可能的话,相同的端口号就分配给TCP、UDP和SCTP的同一给定服务。例如,端口号80不论是TCP还是UDP都被赋予Web服务器,尽管目前它所有的实现都单纯使用TCP。(2)已登记的端口(registeredport)为1024-49151.这些端口不受IANA控制,不过由IANA登记并提供它们的使用情况清单,以方便整个群体。可能的话,相同端口号也分配给TCP和UDP的同一给定服务。(3)动态的(dynamic)或私用的(private)端口:49152-65535.IANA不管这些端口,它们就是我们...

UNIX网络编程读书笔记:简介

认知套接口编程接口理解原始套接口(rawsocket)的概念 值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分。上图中在TCP和UDP之间留有间隙,用于指出应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(rawsocket)。UNIX网络编程中所说的套接口编程接口是应用层到传输层的接口UNIX网络编程的焦点是:如何使用套接口编写使用TCP或UDP的网络应用程序。...

《Head First Java》读书笔记(1)

《HeadFirstJava》(点击查看详情)变量就像杯子,不同的数据类型,往往代表了它们杯子不同的大小容量。这个大概是我目前认识到的最有意思又贴切的比喻了,因为这生动地让我明白了类型之间的转换意义。我们都知道,基本数据类型之间的运算是存在类型转换的,特别是自动转换,其实在运算时有以下规则(由低到高转换):所有的byte、short、char型的值将被提升为int型; 如果有一个操作数是long型,计算结果是long型; 如果有一个操作数是float型,计算结果是float型; 如果有一个操作数是double型,计算结果是double型。顺便来看道题吧://下列代码片段中,存在编辑错误的语句是?byteb1=1,b2=2,b3,b6,b8;finalbyteb4=4,b5=6,b7;b3=(b1+b2);/*语句1*/b6=b4+b5;/*语句2*/b8=(b1+b4);/*语句3*/b7=(b2+b5);/*语句4*/System.out.println(b3+b6);8 1//下列代码片段中,存在编辑错误的语句是?2byteb1=1,b2=2...

微擎学习笔记

1.数据库操作文件名processor.php<?phpdefined('IN_IA')orexit('AccessDenied');classRegisterModuleProcessorextendsWeModuleProcessor{   $sql="select*from".tablename('register')."whereopenid=:openid";   $array=array(':openid'=>$oepnid);   if($res=pdo_fetch($sql,$array)){     $msg="你已经注册,注册名是:".$res['name'];   }else{     preg_match_all('/^报名(.+)',$content,$matches);     $...
代码星球 代码星球·2021-02-20

MyFirstServlet学习笔记

MyFirstServlet学习笔记项目文件的结构目录如下,ser包,下设Serv.java是一个servlet文件,Note只是做的笔记,webroot下有login.jsp,WEB-INF下有web.xml,lib当中有servlet-api.jar文件。首先是login.jsp文件,Form表单的action指向Servlet名称,在本项目中为Serv,method方法post或者get都可以。下面是Serv.java文件,位于ser包下,使用request.getParmeter("")获取jsp页面form表单中值,在out.println中输出一个HTML页面,使用doPost方法引用doGet方法,这样不管form表单使用method哪个方法,servlet都可以进行处理。接下来是web.xml的配置问题,所有的servlet配置信息都要写在web-app标签中,标签<servlet>当中,name即为servlet类名,servlet-class内容写包名.类名,下面的servlet-mapping标签中的name和上面的servlet名称相同,url-pa...
代码星球 代码星球·2021-02-20

大型网站技术架构:核心原理与案例分析阅读笔记

大型网站技术架构:核心原理与案例分析阅读笔记二网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变得越来越盲从,本公司网站的架构设计会越来越差。技术也不能解决所有问题。如果是网站本身的业务架构问题,单靠技术是不能解决所有问题的。此时应该找出业务当中的主要问题,并且根据主要问题通过业务的手段去解决。现在的网站大多是直接购买提供的云计算服务,很少经历从一个小网站到大网站的架构之路,但是我们还是需要明白其中的架构和网站的来龙去脉,对于以后的网站架构技术选型和架构设计都有很大的帮助。...

大型网站技术架构核心原理与案例分析阅读笔记一

大型网站技术架构核心原理与案例分析阅读笔记一构建高可用,高性能,高可扩展性的网站系统。虽然网站类型各有千秋,但是其中还是具有一些通用性的,经过验证的且成熟的局部解决方案。企业应用系统进行开发时会遇到功能性和非功能性需求,功能性需求通过增加人手来加快进度,非功能性需求不是通过增加人的数量就可以解决,他们是现实的技术难题。在系统进行高并发的用户访问时,如果没有很好的架构,很有可能导致系统崩溃,无法响应。软件架构设计采用4+1视图模型来多角度描述软件系统的设计。大型网站软件系统通常具有高并发,大流量,高可用,海量数据,用户分布广泛,网络情况复杂,安全环境恶劣,需求快速变更,发布频繁,渐进式发展的特点.网站发展过程中,一开始只需要使用一台服务器就可以满足需求,所有的服务都在一台服务器,随着用户的增多,需要使应用服务和数据服务分离,应用服务器,文件服务器,数据库服务器,分别对应不同的硬件资源,支持网站业务的进一步发展.随着用户进一步增加,可以使用缓存来解决网站访问的二八定律问题,后期可以通过增加服务器数量来改善应用服务器的负载压力,并且是简单成熟的一种,实现系统的可伸缩性.使用主从热备功能来改...

软件需求分析教程阅读笔记四

  需求调研之后,进行需求分析时,需要提炼、分析、和仔细审查已经收集到的需求,并告知所有的风险承担者,来找出其中的错误、遗漏、或者其他任何不足,需要改进的地方,这样才能开发出高质量的需求报告。  要绘制系统的上下文示意图,也叫顶层数据流图,表示了系统与系统外部实体间的界限和接口,还能表示出系统与外部实体的数据流,当用户后面在变更需求时,可以以上下文图来改变需求的灵活性。  当进行了需求分析之后,需要给用户作出一个系统原型,用户看到需求原型之后,就能更好的清楚自己的需求,能够更好的分析需求文档和原型之间的异同点,双方也能更好的理解要解决的问题。  当时间,成本等因素允许的情况下,要分析需求的可行性,同时还要确定需求的优先级别,完成需求的先后顺序,有些必要的功能,比如核心功能,是要在第一版中就必须完成的,一些其他的功能,可以放在第二版或者后面的更新中来完成。  在进行开发前,需要建立一些模型,就是画一些图形来更加形象化的表示这些需求,比如数据流图,描述了系统与外部世界的数据流向,还有实体关系图、状态变换图或者一些交互作用图,都分别表示了系统的某个方面的需求特征。  开发过程中可能会用到一些...

软件需求分析教程阅读笔记三

软件需求分析教程阅读笔记三第三章在需求工程当中,有可以推荐的比较好的方法。可以从书中所列的众多推荐方法中选取几个比较容易实施并且可以对开发项目具有明显影响的方法开始入手,这样实施起来相对容易并且容易成功。如果每种方法都用上,那显然会使个人觉得这个项目难度很大,实施起来困难重重,最后导致放弃,项目失败。在进行需求分析之前,有必要给软件开发人员进行一次项目知识技能的培训,项目的风险承担着都有必要进行一次知识技能的培训,这样在进行需求分析的时候,才可以了解的更多,对所要接触的领域知识也能略知一二,这样才不至于在进行需求分析的时候,对业务人员的专业术语一概不知。培训之后,更有利于进行需求分析的开展。将用户代表集中起来,进行一次关于需求工程的培训,很有必要的一件事,让用户代表也能明白需求分析的重要性,并且了解忽略前期的需求调研是一件风险多么大的事,在后期的开发过程中,也更能明白软件开发人员的不易,也更能理解软件开发人员,对于需求的变更也会比较谨慎。在文档方面,有必要编写一下项目术语的汇编,将项目当中用到的业务术语进行一个汇总,并逐一进行解释,防止后期进行分析时,会出现不明语义的术语。文档方面还需...

软件需求分析教程阅读笔记二

软件需求分析教程阅读笔记二管理人员在要求开发一个系统时并不会理解进行需求分析的重要性,他们只知道能不能尽快开发出相应的系统来方便使用,但是如果不做好需求分析,最终开发出的系统也不会有人用。客户的需求认识并不像软件开发人员这样,了解的比较清楚,客户通常并不懂得从系统的实际用户处得到信息的重要性,然而从产品的实际用户处收集需求有着不可替代的必要性,所以导致项目最终失败的两个原因,一个是缺乏用户参与,另一个是不完整的需求规格说明。在进行需求分析时,只有系统的实际使用者才能清楚的描述他们要用此系统必须完成的任务。开发之前要清楚客户的概念。客户指直接或者间接从产品中获得利益的个人或者组织。项目的风险承担着有义务说明业务需求,即产品的高层次概念和产品的主要业务内容。业务需求只是高层次需求,还需要从产品的用户处收集用户需求,能够了解该产品要完成的任务,必须要去实际用户处收集用户需求才会有准确性。如果上述两种需求无法分析明白,除非需求极为简单,否则必须要消除需求中模糊不清的地方和一些使程序人员感到困惑的方面。客户与开发人员之间要协调好关系,不能总是只想着自已一方的利益,还要为对方的利益着想。在开发过程...

软件需求分析教程阅读笔记一

软件需求分析教程阅读笔记一许多工程项目不能按时完成或者最后导致失败的一个很大的原因就是弄不清需求是什么,不能准确理解客户的需求意图,所以前期做好需求调研是一件非常重要的工作,是一件与系统代码开发占有同等比重的工作。读这本书的同时,要注意实践过程,不必非得要从一个新项目开始应用,可以找一个以前的或者是现在正在进行的项目,根据书中所讲,着手开始实践.软件需求就是需要知道是什么和为什么。在软件开发当中遇到的许多问题,都是由于收集,编写,协商,修改产品需求过程中的手续和做法失误所带来的。需求分析阶段如果能够做好的话,就能开发出很出色的产品。因为需求分析奠定了软件工程和项目管理的基础。用户和开发者理解的需求是不一样的,所以在开发之前,一定要编写需求文档。并且如果中途换了开发人员的话,可以从需求文档里面查看需求,而不必重新做需求分析。在描述需求的语言和文字上,需要和用户达成共识。软件需求分三个层次:业务需求,用户需求和功能需求,还包括非功能需求。三种需求需要写在软件需求规格说明书中。非功能需求描述了系统展现给用户的行为和执行的操作等。用户需求需要与业务需求一致。需求并没有涉及设计细节,实现细节等信...

阅读笔记之我们应当怎样做需求分析

我们应当怎样做需求分析?成功的软件项目都是一样的,失败的项目却各有各的问题。不过归根到底还是需求的问题。正是我们在需求分析过程存在的巨大隐患,最终导致了那么多项目的失败。只有深入地去理解客户的业务,最后做出来的东西必然是客户满意的。当客户提出业务变更的时候,一定不能被客户牵着走。要从业务角度深入的去分析,他为什么提出变更,提得合不合理,我有没有更合理的方案满足这个需求。当我们提出更加合理的方案时,客户是乐于接受的,变更也变得可控了。客户提出的原始需求往往是不考虑技术实现,基于非计算机管理的操作模式提出来的。但我们作为技术人员,需求分析必须实事求是的、基于技术可以实现的角度去考虑。所以我们必须要基于技术实现去引导客户的需求软件项目的需求调研首先必须要进行角色分析,然后对不同的角色分别进行调研。在敏捷开发过程中,需求分析阶段不可能解决所有的需求问题,因此在设计、开发、测试,直到最终交付客户,这整个过程都应当不停地用开发的成果与客户交流,及时获得反馈。只有这样才能及时纠正需求理解的偏差,保证项目的成功。我们应当怎样做需求调研?首先是双方初步认识,这个时候需要树立良好的职业威信,在交谈中进行...

人月神话阅读笔记—第四章

人月神话阅读笔记—第四章------2016.6.14概念的完整性是很重要的,为了反应一系列连贯的设计思路,可以省略一些不规则的特性和改进,不提倡独立和无法整合的系统,最需要的是在整体概念上的完整性要求。获得概念的完整性时,会出现一种情况,编程系统使计算机更加好用,但是功能比较多的时候,软件外部描述就会比系统本身大很多;但是功能太少,不能满足需求,但是都需要满足概念上的完整性。在进行概念的完整性时,产品设计需要由一个人或者少数几个人来实现,但是对于大型的系统,需要将设计方法、体系结构的工作互相分离来进行开发。系统的结构师,需要将体系结构与实现区分开来。设计结构的过程中,可以遵循民主的理论,可以从所有员工中搜寻好的创意,得到更好的产品,而不是将技术说明的开发工作仅限于少数人。不过在结构设计上,必须要由结构师单方面的设计,为了实现概念上的完整性,这个是必须的。当对体系结构进行限制的时候,这些纪律和规则对行业来说时有益的,并且外部的体系结构规定实际上增加了实现小组的创造性,而不是限制。在进行程序开发之前的规格说明书的书写时,如果让程序实现人员完成说明书的书写,这种决定将是错误的,不但不会提前...
首页上一页...45678...下一页尾页