博文

socket 阻塞与非阻塞 同步与异步(2007-02-08 09:12:00)

摘要:阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。缺省情况下, 三述符处于阻塞状态。   同步异步与阻塞和非阻塞是两种不同的概念来着
同步异步指的是通信模式,而阻塞和非阻塞指的是在接收和发送时是否等待动作完成才返回
所以不能混淆这四个磁。
以下是我的一些理解,请大家多指教
首先是通信的同步,主要是指客户端在发送请求后,必须得在服务端有回应后才发送下一个请求。所以这个时候的所有请求将会在服务端得到同步
其次是通信的异步,指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求,这样对于所有的请求动作来说将会在服务端得到异步,这条请求的链路就象是一个请求队列,所有的动作在这里不会得到同步的。 阻塞和非阻塞只是应用在请求的读取和发送。 在实现过程中,如果服务端是异步的话,客户端也是异步的话,通信效率会很高,但如果服务端在请求的返回时也是返回给请求的链路时,客户端是可以同步的,这种情况下,服务端是兼容同步和异步的。相反,如果客户端是异步而服务端是同步的也不会有问题,只是处理效率低了些。   同步=阻塞式,异步=非阻塞式 同步和异步都只针对于本机SOCKET而言的 同步模式下,比如RECIEV和SEND,都要确保收到或发送完才返回,继续执行下面的代码 不然就阻塞在哪里,所以,同步模式下,一般要用到线程来处理。 异步模式就不同了,不管有没有收到或发送出去,他都马上返回,继续执行下面的代码,结果又消息通知。......

阅读全文(10240) | 评论:0

ASP.NET 网页介绍(2007-01-31 11:35:00)

摘要:使用 ASP.NET 网页可以为网站创建动态内容。通过使用静态 HTML 页(.htm 或 .html 文件),服务器读取文件并将该文件按原样发送到浏览器,以此来满足 Web 请求。相比之下,当用户请求 ASP.NET 网页(.aspx 文件)时,该页则作为程序在 Web 服务器上运行。该页运行时,可以执行您的网站要求的任何任务,包括计算值、读写数据库信息或者调用其他程序。该页动态地生成标记(HTML 或另一种标记语言中的元素),并将该标记作为动态输出发送到浏览器。 本主题概述了 ASP.NET 网页在 Web 应用程序中的工作方式的基本特征。 回发和往返行程 ASP.NET 页面作为代码在服务器上运行。因此,要得到处理,页面必须配置为当用户单击按钮(或者当用户选中复选框或与页面中的其他控件交互)时提交到服务器。每次页面都会提交回自身,以便它可以再次运行其服务器代码,然后向用户呈现其自身的新版本。 ASP.NET 网页的处理循环如下: 用户请求页面。(使用 HTTP GET 方法请求页面。)页面第一次运行,执行初步处理(如果您已通过编程让它执行初步处理)。 页面将标记动态呈现到浏览器,用户看到的网页类似于其他任何网页。 用户键入信息或从可用选项中进行选择,然后单击按钮。(如果用户单击链接而不是按钮,页面可能仅仅定位到另一页,而第一页不会被进一步处理。) 页面发送到 Web 服务器。(浏览器执行 HTTP POST 方法,该方法在 ASP.NET 中称为“回发”。)更明确地说,页面发送回其自身。例如,如果用户正在使用 Default.aspx 页面,则单击该页上的某个按钮可以将该页发送回服务器,发送的目标则是 Default.aspx。 在 Web 服务器上,该页再次运行。并且可在页上使用用户键入或选择的信息。 页面执行您通过编程所要实行的操作。 页面将其自身呈现回浏览器。 只要用户在该页面中工作,此循环就会继续。用户每次单击按钮时,页面中的信息会发送到 Web 服务器,然后该页面再次运行。每个循环称为一次“往返行程”。由于页面处理发生在 Web 服务器上,因此页面可以执行的每个操作都需要一次到服务器的往返行程。 注意 ASP.NET 网页可以运行客户端脚本。客户端脚本不需要到服......

阅读全文(2310) | 评论:0

ASP.NET 网页语法概述(2007-01-31 11:32:00)

摘要:ASP.NET 网页的创建方式与静态 HTML 网页(不包含基于服务器处理的页面)的创建方式相似,但前者包含在页面运行时由 ASP.NET 识别和处理的其他元素。区别 ASP.NET 网页与静态 HTML(或其他)页的特征如下: 文件扩展名为 .aspx,而不是 .htm、.html 或其他文件扩展名。.aspx 文件扩展名可使 ASP.NET 对页面进行处理。 注意 在 Internet 信息服务 (IIS) 中将文件扩展名映射到 ASP.NET。默认情况下,.aspx 页由 ASP.NET 运行,而 .htm 和 .html 页不是。 可选的 @ Page 指令或其他指令,适合于正在创建的页面类型。 为 ASP.NET 正确配置的 form 元素。只有页面所含控件的值在页面处理期间要使用时,才需要 form 元素。 Web 服务器控件。 如果您向页面添加自己的代码,则为服务器代码。 注意 如果希望页面符合 XHTML 标准,则必须包含其他元素,如 DOCTYPE 元素。有关详细信息,请参见 ASP.NET 和 XHTML。 以下各节提供有关这些元素的更多详细信息。 可以使用 .aspx 文件扩展名对任何 HTML 页进行重命名,然后该页将作为 ASP.NET 网页运行。但是,如果页面不涉及服务器处理,则不需要向其添加 .aspx 文件扩展名,因为这会增加页面处理的系统开销。 ASP.NET 网页示例 下面的代码示例演示一个页面,它包含组成 ASP.NET 网页的基本元素。该页面包含 HTML 页中可能含有的静态文本,以及特定于 ASP.NET. 的元素。特定于 ASP.NET 的元素将突出显示。 注意 为清楚起见,此示例页不配置为符合 XHTML。有关详细信息,请参见 ASP.NET 和 XHTML。 Visual Basic  复制代码 <%@ Page Language="VB" %> <html> <script runat="server"> Sub Button1_Click(ByVal sender As Object,......

阅读全文(2550) | 评论:0

服务器端注释(2007-01-31 11:25:00)

摘要:服务器端注释允许开发人员在 ASP.NET 应用程序文件的任何部分(除了 <script> 代码块内部)嵌入代码注释。服务器端注释元素的开始标记和结束标记之间的任何内容,不管是 ASP.NET 代码还是文本,都不会在服务器上进行处理或呈现在结果页上。 <%-- Content of comments, or commented out server controls --%> 备注 ASP.NET 服务器端注释块与传统的语言特定注释块具有相同的用法(包括文档和测试)。例如,您可以使用服务器端注释来描述文件的标记部分,或注释掉页面中声明的一个或多个服务器控件。这些注释可用于大多数类型的 ASP.NET 应用程序文件,包括网页、用户控件、Global.asax 文件、母版页和外观文件 请注意,服务器端注释用于页面的主体,但不在服务器端代码块中使用。当您在代码声明块(包含在 <script runat="server"></script> 标记中的代码)或代码呈现块(包含在 <% %> 标记中的代码)中使用特定语言时,应使用正用于编码的语言的注释语法。 如果在 <% %> 块中使用服务器端注释块,则会出现编译错误。 开始和结束注释标记可以出现在同一行代码中,也可以由许多被注释掉的行隔开。 服务器端注释块不能被嵌套。 示例 下面的代码示例演示使用服务器端注释注释掉的 Button 控件。   复制代码 <%-- <asp:button runat="server" id="MyButton" OnClick="MyButton_Click" /> --%> ......

阅读全文(2173) | 评论:0

从 ASP.NET 显示(2007-01-31 11:23:00)

摘要:可以使用多种方法从 ASP.NET 程序显示信息。一种方法是使用 <%= %> 结构。另一种方法是使用 Response.Write 语句。 使用 <%= %> 从 ASP.NET 程序显示信息的最简单方法是使用 <%= %> 结构。在等号后面输入的值将写入当前页。下面的代码显示 name 变量的值。   复制代码 Hello <%= name %>! 如果名称的值是“Frank”,此代码将在当前页中写入以下字符串:   复制代码 Hello Frank! <%= %> 结构在显示单条信息时最为有用。 Response.Write 语句 显示文本的另一种方法是使用 Response.Write 语句。可以将它放在 <% %> 块内。 <% Response.Write("Hello, World!") %> Response.Write 语句还可以在脚本块内的函数或方法中使用。下面的示例显示了一个包含 Response.Write 语句的函数。 注意 在 ASP.NET 页中,函数和变量应当在 <script> 块内定义,而可执行代码必须括在 <% %> 块内。   复制代码 <script runat="server" language="JScript"> function output(str) { Response.Write(str); } var today = new Date(); </script> Today's date is <% output(today); %>. <BR> Response.Write 语句的输出被合并到正在处理的页中。这样就允许 Response.Write 的输出编写代码,而该代码又可显示文本。例如,下面的代码编写一个脚本块,该脚本块在正在访问该页的浏览器的警报窗口中显示当前日期(服务器上的)。<script> 标记被拆分开,因此服务器将不处理此标......

阅读全文(2142) | 评论:0

指令语法 (2007-01-31 11:16:00)

摘要:指定当页和用户控件编译器处理 ASP.NET Web 窗体页 (.aspx) 和用户控件 (.ascx) 文件时所使用的设置。 备注 当使用指令时,虽然标准的做法是将指令包括在文件的开头,但是它们可以位于 .aspx 或 .ascx 文件中的任何位置。每个指令都可以包含一个或多个特定于该指令的属性(与值成对出现)。 注意 @ Page 指令只能在 .aspx 文件中使用,而 @ Control 指令只能在 .ascx 文件中使用。 ASP.NET 页框架支持以下指令。 @ Page 定义 ASP.NET 页分析器和编译器使用的特定于页的属性。只能包含在 .aspx 文件中。 @ Control 定义 ASP.NET 页分析器和编译器使用的控件特定属性。只能包含在 .ascx 文件(用户控件)中。 @ Import 将命名空间显式导入页或用户控件中。 @ Implements 以声明的方式指示页或用户控件实现指定的 .NET Framework 接口。 @ Register 将别名与命名空间及类名关联起来,从而允许用户控件和自定义服务器控件在被包括到请求的页或用户控件时呈现。 @ Assembly 在编译过程中将程序集链接到当前页,以使程序集的所有类和接口都可用在该页上。 @ Master 标识 ASP.NET 母版页。 @ PreviousPageType 提供用于获得上一页的强类型的方法,可通过 PreviousPage 属性访问上一页。 @ MasterType 为 ASP.NET 页的 Master 属性分配类名,使得该页可以获取对母版页成员的强类型引用。 @ OutputCache 以声明的方式控制页或用户控件的输出缓存策略。 @ Reference 以声明的方式将页或用户控件链接到当前页或用户控件。......

阅读全文(2015) | 评论:0

ASP.NET 表达式概述 (2007-01-31 11:16:00)

摘要:ASP.NET 表达式是基于运行时计算的信息设置控件属性的一种声明性方式。例如,可以使用表达式将属性设置为基于连接字符串的值、应用程序设置以及应用程序的配置和资源文件中所包含的其他值。当分析页的声明性元素时,在运行时计算表达式,并且表达式所表示的值被表达式语法替换。(因为在分析时计算表达式,所以不能在代码中动态创建表达式。) 表达式的一个常见用途是在数据源控件中引用连接字符串。您可以使用表达式来指定连接字符串在配置文件中的位置,而不用将连接字符串作为属性值直接包括在数据源控件中。运行时,将通过从配置文件读取连接字符串来解析表达式。对于需要在运行时解析而不是设置为静态值的任何属性设置,都可以使用表达式。 使用表达式有助于您通过以下方式维护应用程序: 以声明的方式引用动态信息可以减少应用程序中的代码。这将避免编写在运行时设置属性值的代码。 可以在多个控件中重用相同的设置。例如,如果您将某个连接字符串存储在 Web.config 文件中,然后使用表达式在页中引用该连接字符串,那么,您可以在一个中心位置更改该连接字符串,而不必在每个使用该连接字符串的控件中进行更改。 您可以将诸如连接字符串凭据的敏感数据(或其他应用程序数据)存储在 Web.config 文件中,然后对数据进行加密。 在可视化设计器(如 Visual Studio)中工作时,可以利用设计器中的工具来帮助您生成表达式。 表达式也是可扩展的,因此您可以定义自己的表达式语法。您可以创建调用自定义表达式处理程序的表达式,以使用自定义逻辑返回值。 基本语法 ASP.NET 表达式的基本语法如下:   复制代码 <%$ expressionPrefix: expressionValue %> 美元符号 ($) 通知 ASP.NET 它的后面是一个表达式。表达式前缀定义了表达式的类型,如 AppSettings、ConnectionStrings 或 Resources。冒号 (:) 后面的部分是 ASP.NET 将解析的实际表达式值。 表达式语法不受任何特定 .NET 语言的约束。无论您在 ASP.NET 页中使用 Visual Basic、C# 还是其他任何编程语言,都可以使用相同的表达式语法。 连接字符串 表达式的一......

阅读全文(2965) | 评论:0

数据绑定表达式语法 (2007-01-31 11:15:00)

摘要:当在页上调用 DataBind 方法时,数据绑定表达式创建服务器控件属性和数据源之间的绑定。可以将数据绑定表达式包含在服务器控件开始标记中属性/值对的值一侧,或页中的任何位置。 <tagprefix:tagname property="<%# data-binding expression %>" runat="server" /> - or - literal text <%# data-binding expression %> 参数 property 为其声明数据绑定的控件属性。 data-binding expression 符合备注部分中概述的要求的任意表达式。 备注 所有数据绑定表达式都必须包含在 <%# 和 %> 字符之间。 ASP.NET 支持分层数据绑定模型,该模型创建服务器控件属性和数据源之间的绑定。几乎任何服务器控件属性都可以绑定到任何公共字段或属性,这些公共字段或属性位于包含页或服务器控件的直接命名容器上。 数据绑定表达式使用 Eval 和 Bind 方法将数据绑定到控件,并将更改提交回数据库。Eval 方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回。Bind 方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。 可以使用 XPath 和 XPathSelect 方法以及 XPathBinder 类从 XmlDataSource 控件绑定到 XML 数据。有关更多信息,请参见 XmlDataSource Web 服务器控件。 示例 下面的代码示例演示如何在 ASP.NET 服务器控件中根据属性进行数据绑定。当用户从 DropDownList Web 服务器控件选择某个状态时,Label Web 服务器控件将根据列表中的选定项进行绑定并显示选中的状态。 C#  复制代码 <html> <head> <script language="C#" runat="server"> void SubmitBtn_Click(Object sender, EventA......

阅读全文(3107) | 评论:0

代码呈现块 (2007-01-31 11:15:00)

摘要:代码呈现块定义当呈现页时执行的内联代码或内联表达式。存在两种样式的代码呈现块:内联代码和内联表达式。使用内联代码可以定义独立的行或代码块。将内联表达式用作调用 Write 方法的快捷方式。 <% inline code %> <%=inline expression %> 备注 如果您尝试将字符序列 %> 包含在代码呈现块中的任意位置,则会出现编译错误。该序列只能用于结束代码呈现块。例如,下面的代码将导致错误: C#  复制代码 <%@ page language="C#" %> <% Response.Write(" %>"); %> Visual Basic  复制代码 <%@ page language="VB" %> <% Response.Write("%>) %> 若要更正该错误,可以构建包含字符序列的字符串,如下面的代码示例所示: C#  复制代码 <%@ page language="C#" %> <% String s = "%" + ">"; Response.Write(s); %> Visual Basic  复制代码 <%@ page language="VB" %> <% Dim s as String s = "%" & ">" Response.Write(s) %> 注意 与 Active Server Pages (ASP) 不同,在 ASP.NET 中,声明代码呈现块(在 <% 与 %> 标记之间)中的函数或子例程是无效的。 示例 下面的代码示例演示如何使用代码呈现块以多种不同的字号显示相同的 HTML 文本。 C#  复制代码 &......

阅读全文(2286) | 评论:0

ASP.NET 网页中的嵌入式代码块(2007-01-31 11:15:00)

摘要:将代码添加到 ASP.NET 网页中的默认模型要么创建一个代码隐藏类文件(代码隐藏页),要么将页的代码写到具有 runat="server" 属性的 script 块中(单文件页)。编写的代码通常会与页上的控件进行交互。例如,通过从代码中设置控件的 Text(或其他)属性,可以在页上显示信息。 另一种可能是使用嵌入式代码块将代码直接嵌入到页中。 嵌入式代码块 嵌入式代码块是在呈现页面的过程中执行的服务器代码。块中的代码可以执行编程语句,并调用当前页类中的函数。 下面的代码示例演示包含嵌入式代码块的 ASP.NET 页,该代码块显示循环结果。 Visual Basic  复制代码 <%@ Page Language="VB" %> <html> <body> <form id="form1" runat="server"> <% For i As Integer = 0 To 5 %> <% Response.Write("<br>" & i.ToString())%> <% Next%> </form> </body> </html> C#  复制代码 <%@ Page Language="C#" %> <html> <body> <form id="form1" runat="server"> <% for(int i = 0; i < 6; i++) %> <% { Response.Write("<br>" + i.ToString()); }%> </form> </body> </html> 下面的代码示例演示一个嵌入式代码块,该代码块显示 span 元素中的公共 GetTime() 函数的值。在嵌入式代码块中,语法 <% = expression %> 用于......

阅读全文(3338) | 评论:0