摘要:SocketAsyncEventArgs是.net提供的关于异步socket类,封装了IOCP的使用,可以用它方便的实现NIO(non-blocking IO)NIO对于提升某些场景下Server性能和吞吐量有很大益处,准备在服务框架中使用它来编写简易rpc的部分微软官方的demo代理有所缺少:http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx还有篇老外写的补充了缺少的代码:http://www.codeproject.com/KB/IP/socketasynceventarg
阅读全文
07 2013 档案
摘要:from:http://www.cnblogs.com/zhoutk/archive/2012/12/26/2833495.html最近有项目要做一个高性能网络服务器,决定下功夫搞定完成端口(IOCP),最终花了一个星期终于把它弄清楚了,并用C++写了一个版本,效率很不错。但,从项目的总体需求来考虑,最终决定上.net平台,因此又花了一天一夜弄出了一个C#版,在这与大家分享。一些心得体会:1、在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用。请参考:http://msdn.microsoft.c
阅读全文
摘要:作者:蓝形参,Geek 伪技术宅 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来),这时候该怎么办?阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干(或者说接下来的事要等快递来了才能做)...
阅读全文
摘要:一、I/O模型首先,输入操作一般包含两个步骤:1、等待数据准备好(waiting for data to be ready)。对于一个套接口上的操作,这一步骤关系到数据从网络到达,并将其复制到内核的某个缓冲区。2、将数据从内核缓冲区复制到进程缓冲区(copying the data from the kernel to the process)。二、I/O模型类型其次了解一下五种I/O模型:blocking I/Ononblocking I/OI/O multiplexing (selectandpoll)signal driven I/O (SIGIO)asynchronous I/O (t
阅读全文
摘要:http://www.cnblogs.com/wangkunyu/archive/2013/07/22/3206477.html“open-close"prinple (OCP) Open-Closed Principle tells that:a software entity should open to extend and close to modify.advantage: by extending existing software system,we can offer new actions,in order to meet new meet to software,
阅读全文
摘要:前言:本文介绍为什么使用Dns.GetHostAddresses()在不同计算机上执行结果不同的原因;并且给出了筛选IPv4或者ipv6地址的代码。在XPsp3系统和Win7系统分别执行Dns.GetHostAddresses()方法,得到了不同的结果:win7:xp:xp中在cmd输入如下命令:原因可知:xpsp3系统没有安装ipv6协议,下面安装进行测试:安装ipv6协议:再输入ipv6 if >D:\ipv6if.txt输出内容如下:Interface 6: Ethernet: 本地连接 Guid {14F445CB-3489-474B-B644-5F749E251F46} use
阅读全文
摘要:窗体闪退,在不同机器上运行效果不同:有的闪退;有的正常;有的弹框。从弹框的机器得到信息:EventType clr20r3 P1....P2...PN搜索大概得到如下信息:在某些Windows Server 2003的操作系统上,运行.Net 2.0或者3.5的应用程序时,会发现没有任何反应,到系统的事件查看器里会发现类似EventType clr20r3 P1....P2...PN的错误提示。很可能的原因就是:你的应用程序出现了异常,而.net没有或者无法捕捉该异常,所以导致出现如下情况:1.双击可执行程序,没有反应。2.此时去任务管理器中会看到一个DW20.exe的进程,不久会自动消失3.
阅读全文
摘要:黄色框线里面表示客户端请求关闭连接。补充细节(来自网络):关于以上的四次握手,我补充下细节:1. 默认情况下(不改变socket选项),当你调用close( or closesocket,以下说close不再重复)时,如果发送缓冲中还有数据,TCP会继续把数据发送完。2. 发送了FIN只是表示这端不能继续发送数据(应用层不能再调用send发送),但是还可以接收数据。3. 应用层如何知道对端关闭?通常,在最简单的阻塞模型中,当你调用recv时,如果返回0,则表示对端关闭。在这个时候通常的做法就是也调用close,那么TCP层就发送FIN,继续完成四次握手。如果你不调用close,那么对端就会处于
阅读全文
摘要:TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后
阅读全文
摘要:源码源码2:添加了IP地址、断开等的设置框。来源:http://www.cnblogs.com/fujinliang/archive/2012/06/20/2557064.html异步TCP和同步TCP类似,和其他所有的异步调用一样:几个基本的异步调用.AsyncCallback委托AsyncCallback委托用于引用异步操作完成时调用的回调方法。在异步操作方式下,由于程序可以在启动异步操作后继续执行其他代码,因此必须有一种机制,以保证该异步操作完成时能及时通知调用者。这种机制可以通过AsyncCallback委托实现。异步操作的每一个方法都有一个Begin…方法和End…方法,例如Begi
阅读全文
摘要:来自:http://www.cnblogs.com/xiaoyusmile/archive/2011/12/08/2280925.html源码下载在c#中,event与delegate是两个非常重要的概念。因为在Windows应用程序中,对事件的使用非常频繁,而事件的实现依赖于delegate。 下面是对网上一些比较好的关于delegage的资料的整理,以及自己的一些想法。委托概述委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。一旦为委托分配了方法,委托将与该方法具有完全相同的行
阅读全文
摘要:http://www.cnblogs.com/heyuquan/archive/2013/03/22/2976420.html传送门:异步编程系列目录……大部分开发人员,在开发多线程应用程序时,都是使用ThreadPool的QueueUserWorkItem方法来发起一次简单的异步操作。然而,这个技术存在许多限制。最大的问题是没有一个内建的机制让你知道操作在什么时候完成,也没有一个机制在操作完成时获得一个返回值。为了克服这些限制(并解决其他一些问题),Microsoft引入了三种异步编程模式:.NET1.0异步编程模型(APM),基于IAsyncResult接口实现。.NET2.0基于事件的异
阅读全文
摘要:http://www.cnblogs.com/heyuquan/archive/2013/04/26/async-list.html术语:APM异步编程模型,Asynchronous Programming ModelEAP基于事件的异步编程模式,Event-based Asynchronous PatternTAP基于任务的异步编程模式,Task-based Asynchronous PatternTPL任务并行库,Task Parallel Library现在我给这个系列整个目录和做个简单介绍。“概要+目录”整理C#语言是微软于2000年发布,基于.NET Framewrok框架的、面向对
阅读全文
摘要:http://msdn.microsoft.com/zh-cn/library/ms228969(v=vs.90).aspx异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行。.NET Framework 为异步操作提供两种设计模式:使用IAsyncResult对象的异步操作。使用事件的异步操作。IAsyncResult设计模式允许多种编程模型,但更加复杂不易学习,可提供大多数应用程序都不要求的灵活性。可能的话,类库设计者应使用事件驱动模型实
阅读全文

浙公网安备 33010602011771号