c# 用 arp -a cmd命令查看ip地址提取 IP 和 mac 到 listBox 显示请求帮助

本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。

(以下简称.NET)框架是微软提出的新一代Web软件开发模型,C#语言是.NET框架中新一代的开发工具。C#语言是一种现代、面向对象的语言,它简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了C++的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。C#语法和C++和JAVA语法非常相似,如果读者用过C++和JAVA,学习C#语言应是比较轻松的。

Time,JIT)将中间语言代码翻译为CPU可执行的机器码,由CPU执行。CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其它一些好处,主要有:

l  通用语言规范(Common Language Specification,CLS):.NET系统包括如下语言:C#、C++、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,由CLR负责执行。只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。

l  自动内存管理:CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用的实例占用的内存空间。不必象C和C++语言,用语句在堆中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR具有自动内存管理功能。

l  交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。由于中间语言代码由CLR负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。

l  增加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。也避免指针的误操作产生的错误。CLR执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的修改。

版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件运行不了。在.NET中这些组件或动态联接库不必在注册表中注册,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及库文件拷贝到指定文件夹中就可以了。

l  完全面向对象:不象C++语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全面向对象的,在C#中不再存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重继承。

平台框架提供的最基本的名字空间之一,有关名字空间的详细使用方法将在以后详细介绍,这里只要学会怎样导入名字空间就足够了。

程序的第二行class Welcome声明了一个类,类的名字叫做Welcome。C#程序中每个变量或函数都必须属于一个类,包括主函数Main(),不能象C或C++那样建立全局变量。C#语言程序总是从Main()方法开始执行,一个程序中不允许出现两个或两个以上的Main()方法。请牢记C#中Main()方法必须被包含在一个类中,Main第一个字母必须大写,必须是一个静态方法,也就是Main()方法必须使用static修饰。static void Main()是类Welcome中定义的主函数。静态方法意义见以后章节。

程序所完成的输入输出功能是通过Console类来完成的,Console是在名字空间System中已经定义好的一个类。Console类有两个最基本的方法WriteLine和ReadLine。ReadLine表示从输入设备输入数据,WriteLine则用于在输出设备上输出数据。

namespace e1//定义以下代码所属命名空间,意义见以后章节

{   系统CLR内建垃圾收集器,当对象的引用变量被撤销,表示对象的生命周期结束,垃圾收集器负责收回不被使用的对象占用的存储空间。例如,上例中引用变量r1及r2是MyClass类对象的引用,存储在栈中,退出函数f1,r1和r2都不存在了,在堆中的MyClass类对象也就被垃圾收集器撤销。也就是说,CLR具有自动内存管理功能。 



n=0表示两个字符串相同,n小于零,s1<s2,n大于零,s1>s2。此方法区分大小写。也可用如下办法比较字符串:

if(s==s1)//还可用!=。虽然String是引用类型,但这里比较两个字符串的值

l  判断是否为空字符串

if(的代码编辑器,键入string,将光标移到键入的字符串string上,然后按F1键。

t=0;//引用静态字段采用方法:类名.静态字段名



Library)。它是一个统一的、面向对象的、层次化的、可扩展的类库,统一了微软当前各种不同的框架和开发模式,无论开发Windows应用程序,还是开发Web应用程序,采用相同的组件名称,组件具有相同的属性、方法和事件,开发模式也类似,方便程序员学习。.Net框架类库支持控件可视化编程,.Net中的VC++.Net、框架类库,为了运行C#程序,必须安装.Net FrameWork。

系统中定义的窗体类,Form类对象具有Windows应用程序窗口的最基本功能,有标题栏、系统菜单、最大化按钮、最小化按钮和关闭按钮、用户区。Form类对象还是一个容器,在Form窗体中可以放置其它控件,例如菜单控件,工具条控件等等。\Framework\建立Windows应用程序框架

以上所做的工作,都是一些固定的工作,可以使用Visual 创建Windows应用程序的具体步骤。

(1) 运行Visual 生成的创建Windows应用程序的最基本的形式。底色为黑色的字是作者增加的注解。

using 为开发人员提供了解决方案资源管理器窗口(图打开该解决方案,必须保存除了两个文件夹以外的所有文件,实际上,由于文件夹e2不太大,可以保存整个e2文件夹。如果重新开始一个解决方案,首先用菜单项文件/关闭解决方案,关闭当前项目,再新建一个项目。为了用Visual 框架类库,那些提供了API。

(4)运行C#程序,应首先安装那些软件。

(5)定义一个和应用程序同生命周期的变量,该变量应定义在何处,说明该变量的使用范围。

(6)在窗体中增加一个控件,应如何操作,集成环境增加了那些代码。

(7)为控件增加事件函数,应如何操作,集成环境增加了那些代码。

(8)如何为窗体文件增加一个方法,说明该方法的使用范围。

Visual )使用控件(组件)设计Windows应用程序。将系统中定义的窗体类(WinForm),它属于建立C# Windows应用程序的基本步骤。具体实现步骤如下:

(1)建立一个新项目,生成一个空白窗体(Form1),见图,再启动。用文件/打开项目菜单项打开刚才关闭的项目文件(扩展名为sln)。应能看到刚才关闭的设计界面。必须打开项目,才能完成编译工作。



(4)  运行,效果如右图,注意只有字符微软带下划线。单击微软,打开浏览器访问微软主页。

(5)  如果要打开一个窗口,列出C盘根目录下的文件及文件夹,LinkLabel控件事件LinkClicked事件处理函数修改如下:

  1. \Common7\Graphics\Icon\Misc文件夹中有若干图标。也可用画笔程序自己设计图标,图标的宽和高应比工具条按钮的宽和高略小,存为.ico文件。也可以用抓图软件抓其它程序的图标。任选以上方法,为ImageList对象增加两个图标。

    单击ToolBar控件属性Buttons后按钮,打开ToolBarButton集合编辑器(见上图),单击添加按钮,增加一个按钮,从其属性ImageIndex后的下拉列表中选择按钮使用的图标,设置按钮的ToolTipText属性为:改变字体为红色,为工具按钮增加提示。同样方法增加第二个按钮,按钮的ToolTipText属性为:改变字体为黑色。

    的编辑器那样的文本编辑器,有多个选项卡页。

    的编辑器的文本编辑器的具体实现步骤如下:

    (2)  单击TabControl属性TabPages后按钮,打开TabPage集合编辑器,单击添加按钮,增加1个选项卡页。修改属性Text分别为:第一页,第二页。如图系统的基础类库(.Net FrameWork)对Windows操作系统的图形设备接口函数库( Framework提供了一个完整而功能强大的线程模型,该模型允许编程人员精确控制线程中运行的内容,线程何时退出,以及它将访问多少数据等。所以,在.NET中,既提供了C++的强大功能,又具有VB6的简单性。

    可以开发数据库应用程序。

    由于中有两类Connection对象,一类用于微软的Sql Server数据库,该对象连接微软SQL数据库时效率较高,另一类用于其它支持ODBC的数据库。连接Sql Server数据库序应引用如下命名空间:

    Using 建立连接,例子见/?src=http%3A%2F%%2Farticles%通过Command对象用SQL语句来访问数据库中的数据,对数据库中的数据进行查询,增加、删除记录,修改记录中的数据。具体用法如下:

    数据库访问被设计为以不连接的数据模型为基础,应用程序只在获取或更新数据时保持连接,其它时间都是断开的。由于数据库并未被大部分时间空闲的连接占用,所以它可以为更多用户服务。

    连接数据库StudentI并显示Student表,具体步骤如下:

    DB提供程序为技术编制服务器端动态网页所需的网络和HTML标记语言方面有关的知识。然后介绍技术编制服务器端动态网页,必然要和网络打交道,具备一些网络方面的知识是必要的。这里假设读者已经学过计算机基础课程,在此基础上,进一步介绍用,清华大学的域名。

    在INTERNET中访问其它计算机必须使用IP地址,因此域名必须转换为IP地址。实现域名(和WINDOWS/2000/98中计算机名有区别)和IP地址转换的软件叫DNS(域名服务器)。在网内有一台计算机运行DNS服务器软件,这台计算机叫DNS服务器。它负责一定区域内的计算机域名和IP地址的转换,这个区域一般是一个网的内部的所有计算机。当网内的计算机用域名和其它计算机通讯时,则首先呼叫DNS服务器,DNS服务器送出此域名对应的IP地址,网内的计算机收到IP地址后,再利用IP地址和其它计算机通讯。如果,本DNS不能转换相应的域名,则向上一级DNS申请转换。计算机要和INTERNET联接,设置TCP/IP时,必须设置DNS服务器IP地址。

    微软域名,此处可以是IP地址,其格式为http://IP地址:端口号/全路径文件名。全路径文件名:它指示访问文件的全路径,只写出宿主目录以下的全路径文件名。如果在访问主页时不指定此项,则访问其默认主页,例如当我们在浏览器的URL(地址)处键入/时,将访问sun公司默认主页。当光标移到某关键词,光标变为手型,单击此关键词则显示和此关键词相联系的URL所指定的网页。此网页可能在Internet中某网站的计算机中。在www系统中,每一个网页都有自己的URL,由它决定此网页在www网中的具体位置。它很象计算机文件系统中的文件全路径名。

    /,用DNS(域名系统)转换域名为IP地址,通过IP地址和sun公司的Web服务器通讯,sun公司的Web服务器接到信息后,由于未指定文件名,将默认主页送出。浏览器接到主页数据,将其显示。主页中列出各项主题,每当鼠标经过这些主题时,鼠标变为手形,双击此主题,将和主题有关的网页调入并显示。这种方法叫超链接。超链接的本质是:单击该题目,转换为所联系网页的URL,在此URL中,在文件路径名处,指出了网页在Web服务器中路径及文件名,当把这些信息送给Web服务器后,Web服务器就送出指定的网页。

    ,JSP,PHP等。中间对齐:<center>教案/教案/中叫WebForm。同时还需要一些其它控件,例如,编辑框控件,列表框控件,下拉列表框控件和按钮等。可以用HTML标记语言定义控件。IE浏览器看到这些标记,就把它显示为相应的控件。控件有许多属性,也可以用HTML标记语言表示,每个属性用空格分开,用属性名称=属性值格式定义。

    设计静态网页有两种方法:一种是使用记事本,用HTML语言编写,另一种是使用可视化工具,如FrontPage,Dreamware等。显然,使用可视化工具要方便快捷的多。以往设计服务器端动态网页时,例如ASP,往往只能使用记事本一行一行的写,效率很低。程序员迫切需要一种设计服务器端动态网页的可视化工具,能象使用C#设计Window应用程序一样设计动态网页,使用控件类、属性和事件等面向对象的概念。为了实现这个目的,引入服务器端控件首先引入运行在服务端WebForm概念,在WebForm中可以放入多个服务器端控件,例如,列表框、编辑框、按钮等等,所有这些控件,都是.NET框架类库中相应类的对象,每个对象都有自己的属性、方法和事件。这些概念和编制Windows应用程序相应的概念基本相同。这些技术创建的服务器端动态网页的扩展名为.aspx。

    本节首先介绍动态网页的方法,最后介绍如何使用Visual 动态网页。

    中的HTML服务器端控件和标准的HTML控件有着对应关系,但功能更强大。可以在程序中修改HTML服务器端控件的属性,能够在服务器端响应事件,支持数据绑定等。例如增加一个HTML服务器端控件编辑框用如下HTML语句:

    这里和标准的HTML控件的区别是增加了属性RUNAT=”SERVER”。属性ID是代表这个控件的唯一标志,和Winndows应用程序中的控件属性Name的意义是一样的。HTML服务器端控件是为了方便原来学习HTML或ASP编写Web应用程序的程序员而提供的。如果,你以前是Windows应用程序员,建议使用Web服务器端控件,这些控件不但功能更强大,而使用上更象Windows应用程序中的控件,因此学习更方便。因此这里就不介绍HTML服务器端控件了。

    系统中,除了常规的HTML控件外,还包括Web服务器端控件。同HTML服务器端控件一样,这些控件可以在程序中修改服务器端控件的属性,能够在服务器端响应事件,支持数据绑定等。例如定义一个Web服务器端控件编辑框控件,方法如下:

    服务器端控件不但功能更强大,而且和编制Windows应用程序中的控件使用方法基本一致,因此学习更方便。本书的所有例子都使用Web服务器端控件。

    应用程序也采用事件驱动的概念,用户对浏览器的各种操作都被看作事件,事件产生后,Web应用程序用事件处理函数响应事件。但动态网页

    服务器端控件都要放到Web窗体(WebForm)中,Web窗体(WebForm)也由Web服务器负责解释。下边是一个最简单的使用服务器端控件的例子:

    <title>这是我的第一个实现实现上节的例子。具体步骤如下:

    (1) 运Visaul C#后,则进入开始界面,选择新建项目。打开新建项目对话框,在项目类型中选择Visual C#项目,在模板中选择[为我们建立了一个应用项目。

    (2)向项目中添加控件需要使用[Toolbox]窗口,若看不到,可以用菜单视图/工具箱打开这个窗口。

    (3)先选中[Toolbox]窗口中[Web窗体]类型下的[Label]条目,然后在设计的窗体中按下鼠标左键并拖动鼠标,画出一个Label控件。该控件用来显示一行文本。

    (4)使用[Properties]窗口修改Label控件的文本内容和文本字体属性。在右下侧属性窗口中找到[text]属性,把它的值由“Label1”改为”现在的时间是:”;接着在属性窗口中找到[Font]属性,选中Font所在的单元格,单击Font属性左边的“+”号,在出现的子属性中编辑,可以修改Label控件中文本的字体和字号等属性。编辑完成后,单击变成“-”号的方框隐藏Font的子属性;修改Label控件的ForeColor属性,可以修改Label中文本的颜色。

    (5)从[Toolbox]窗口中选中一个Button控件到窗体,在[Properties]窗口中将按钮的[Text]属性分别改为”查看时间”。

    (6)为单击查看时间按钮事件(Click)函数增加语句(双击Click事件):


    任何一个静态网页只要把其扩展名修改为aspx,在的设计目标之一就是尽可能地保持和现有ASP页面的语法及运行库的兼容。希望将现有ASP页面文件的扩展名改为.aspx,这些页面仍可以在已不再支持VBScript了,而且VB语言本身也发生了变化。


    在浏览器端看不到这些代码,用IE菜单查看/源代码,可以看到用超文本编制的网页。这样使用C#语句,不是一个好的习惯,不建议使用。

    本章介绍常用的Web服务器端控件的属性、事件和方法,以及用Web服务器端控件编制服务器端动态网页的方法。

    所谓数据绑定技术就是把数据集的某个或者某些数据绑定到控件的某些属性上面的一种技术。说的具体些,就是把数据集中某个或者某些数据绑定到Text控件、ListBox控件、ComBox等控件上的能够显示数据的属性上面。当对控件完成数据绑定后,其显示的内容将随着数据集的变化而变化。

    引入了新的数据绑定语法。这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。

    
     DataBind是页和所有服务器控件的方法。当需要更新被绑定的数据时,必须调用此方法。当在父控件上调用DataBind时,该控件的所有子控件也同时调用自己的DataBind方法。例如,当调用实现,具体步骤如下:

    (6)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。

    (7)放工具箱的DrowDownList控件到窗体。单击属性Items后的按钮,出现选择ListItem集合编辑器对话框,单击添加按钮,增加三项。修改每项的属性Text,分别为:课程总论、刚体静力学、弹性静力学。

    (8)  放工具箱的Button控件到窗体,为单击确定按钮事件(Click)函数增加语句(双击Click事件):

    private void Button1_Click(object sender, 数据绑定语法支持绑定到公共变量、页的属性和页上其他控件的属性。下面的示例说明如何绑定到公共变量和页上的简单属性。注意这些值在DataBind()调用前初始化。

     实现的方法见上例及书。

    提供了一种静态方法实现模板,具体步骤如下:

    1. 提供了一些验证控件,可以不用编程完成对输入的数据进行验证。本节介绍如何使用这些数据验证控件。

      提供了一些验证控件,可以不用编程完成对输入的数据进行验证。下边是一个使用验证控件简单的例子,该例以数据验证控件RequiredFieldValidator为例,介绍数据验证控件属性的使用方法。有些数据用户是必须输入的,这些数据可以用编辑控件,单选或多选按钮等控件输入。可以用控件RequiredFieldValidator对这些控件输入的数据进行验证,检查用户是否输入了数据。控件RequiredFieldValidator的属性ControlToValidate的值选择要验证的控件的id值,可以是编辑控件,单选或多选按钮等。属性ErrorMessage是发生错误时,提示的错误信息。用户用编辑控件textBox1输入姓名,要求必须输入。用控件RequiredFieldValidator1对其输入进行验证,因此属性ControlToValidate= textBox1。属性ErrorMessage=”必须输入姓名”。当单击提交按钮后,如果用户没有输入姓名,则用”必须输入姓名”提示用户。

      框架类库中提供以下几种验证控件:

      编辑。该例子增加一个RadioList控件,输入卡的类型,增加一个编辑控件,输入编号,两者都要求必须输入,用两个RequiredFieldValidator控件验证。步骤如下:

      (1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。

      (3)放工具箱的Label控件到窗体,其属性[Text]=“输入卡号”。

      (5)单击属性Items后的按钮,出现集合编辑器对话框。单击添加按钮,增加一个RadioButton按钮,修改其Text属性为”苹果卡”,修改其Selected属性为法false。用同样方法增加另一个RadioButton按钮,修改其Text属性为”橡胶卡”,修改其Selected属性为法false。

      (6)放工具箱的Label控件到窗体,其属性[Text]=“输入编号”。

      (1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。

      (3)放工具箱的Label控件到窗体,其属性[Text]=“键入一个偶数”。

      (6)放工具箱的Button控件到窗体,为其增加单击事件函数如下:

      (1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。

       
       
       
      
       
       
       


















      本例有两个窗口,主窗口负责输入留言,包括输入用户名,留言主题,留言内容,用三个编辑框,输入完毕后,单击提交按钮,将留言存入数据库。单击另一个查看留言按钮,可链接到另一个显示留言窗口。显示留言窗口包括一个DataGraid控件,用来显示所有的留言的用户名,主提,留言序号,及按钮列,单击相应按钮,显示当前记录的留言内容。单击返回主窗口按钮,返回主窗口。下边是具体步骤:


      为保持浏览用户的数据和信息,内建了许多对象,包括Application、Response、Request、cookie、Sessions、Cache和Server等对象,以及它们的大量的方法。通过这些对象,可以提供网络开发必不可少的功能,例如当前目录的获得、在线人数、访问网站总人数、网上商店中的购物筐等等。

      中一般不用Response对象发送信息给浏览器,可以用其它方法重定向浏览器到另一个URL,因此在不建议这样使用。)

















      这里实现的功能完全可以用HyperLink控件实现,请读者试一试。但是如果根据条件用语句实现转向其它网页,使用此语句还是必要的,例如,有些用户企图不经过登录直接访问其它网页,在其它网页的Page_Load方法中要进行判断,如果未登录,可用上述方法直接转向登录界面。

      中我们有解决方法,在/中的字符/,用Server对象URLEncode方法处理,



      
       
      首先,创建一个XML文档,文件名为从入门到精通</书名>





























      单击两个按钮,可以创建带XML架构和不带XML架构XML文件,文件名为"建立和显示XML文档
      (1) 创建一个Web应用程序框架,项目名为UseXml。


      (4) 新建一个XML文件。单击菜单项”项目/添加新项”,弹出标题为添加新项的窗口,在窗口中选中XML文件,文件名为从入门到精通</书名>





















      ///清理所有正在使用的资源。






      (4) 下面给这个webservice添加一个方法。微软帮我们写好了一个如下,以被注解掉。





      添加一个自己的方法。方法名称叫show





      (5) 现在可以测试这个Web服务,按F5运行,点击show,输入你的名字,然后点击invote按钮,在浏览器上显示如下内容,这是用XML标记表示的调用Web服务方法Show返回的结果。

      (6) 打开bin目录,程序,即可以是中提供了一些工具,可以自动生成WSDL文档,这里就不介绍WSDL了,可以通过下边方法看到的Web服务客户端程序
      Web服务客户端程序是用来调用服务器端的Web服务方法,前边使用浏览器调用Web服务方法,只能算做一种测试,通过这种测试,可以验证Web服务方法的正确性,发现错误。作为客户端程序,无论在何处,采用那种操作系统,希望只要知道Web服务的所在网址,就可以调用其相关Web服务方法。Web服务客户端程序一般应在Web网上的另一台计算机中,单做实验或学习,也可以和Web服务在同一台计算机中。本节介绍如何实现基于.Net的Web服务客户端程序。


       
       建立Web服务客户端程序
       
       
      使用Visual ,新建windows应用程序项目,命名为AddServiceClient,在窗体中增加一个按钮用来调用Web服务的Web方法,三个文本框,两个用来输入两个加数,另一个用来显示调用Web服务的Web方法后返回的结果。
      建立Web服务客户端程序一般要建立一个代理。选择菜单项”项目”|/”添加Web引用”,在弹出的对话框中的地址栏中输入Web服务的URL,例如Web服务所在的计算机的IP地址是");
      欢迎龙卷风.NET


      Web服务自动地有提供一个产生发现文档的能力。




      Web服务发现是使用Web服务描述语言WSDL定位或发现一个或多个描述特定的XML Web服务的文件的操作。它让XML Web服务客户端得知一个XML Web服务是否存在并且到哪里找到这个XML Web服务的描述文件。
      一个发布的.disco文件,是包含连接到其他描述XML Web服务的资源的XML文件,能够编程发现一个XML Web服务。

C# 温故而知新:Stream篇(七)

.Sockets),聪明的你马上会反应过来:

既然是在网络中传输的流,那必然有某种协议或者规则约束它,不错,这种协议便是Tcp/IP协议,这个是什么东东?别急,我先让大家了

解下NetworkStream的作用:如果服务器和客户端之间基于TCP连接的,他们之间能够依靠一个稳定的字节流进行相互传输信息,这也是

NetworkStream的最关键的作用,有了这个神奇的协议,NetWorkStream便能向其他流一样在网络中(进行点对点的传输),这种传输的

效率和速度是非常高的(UDP也很快,稍后再介绍)

如果大家对这个概念还不是很清晰的话,别怕,后文中我会更详细的说明

这里有5点大家先理解就行

  1. NetworkStream只能用在具有Tcp/IP协议之中,如果用在UDP中编译不报错,会报异常
  2. 在网络中利用流的形式传递信息
  3. 用法和普通流方法几乎一模一样,但具有特殊性

值的按位组合,这些值指定授予所提供的 Socket 上的 NetworkStream 的访问类型

对于NetworkStream构造函数的理解相信大家经过前文的解释也能够掌握了,但是有几点

但是以下方法必须注意:

该方法将数据读入 buffer 参数并返回成功读取的字节数。如果没有可以读取的数据,则 Read 方法返回 0。Read 操作将读取尽可能多的可用数据,

直至达到由 size 参数指定的字节数为止。如果远程主机关闭了连接并且已接收到所有可用数据,Read 方法将立即完成并返回零字节。

将流的当前位置设置为给定值。此方法当前不受支持,总是引发 NotSupportedException。

Write方法在指定的 offset 处启动并将 buffer 内容中的 size 字节发送到网络Write 方法将一直处于阻止状态(可以用异步解决),直到发送了请求

创建一个客户端向服务端传输图片的小示例

服务端一直监听客户端传来的图片信息

/// 服务端监听客户端信息,一旦有发送过来的信息,便立即处理 //文件流建立到磁盘上的读写流 //服务端监听任何IP 但是端口号是80的连接 //线程会挂在这里,直到客户端发来连接请求 //得到从客户端传来的网络流 //如果网络流中有数据 //同步读取网络流中的byte信息 //异步读取网络流中的byte信息 //获得每次异步读取数量 //如果全部读完退出,垃圾回收 //将网络流中的图片数据片段顺序写入本地

 客户端先连接上服务端后在发送图片,注意如果是双向通信的话最好将客户端和服务端的项目设置为多个启动项便于调试

//创建一个文件流打开图片 //声明一个byte数组接受图片byte信息 //找到服务器的IP地址 //创建TcpClient对象实现与服务器的连接 //连接完服务器后便在客户端和服务端之间产生一个流的通道 //通过此通道将图片数据写入网络流,传向服务器端接收

服务器端建立服务并且循环监听 

 客户端连接服务端的请求,和循环监听服务端传来的信息

/// 建立与服务器端的异步连接 //获得服务器IP地址 //开始异步连接,注意将socket放入异步方法的参数中,提供给回调方法使用 //建立一个接受信息的byte数组 //判断是否和服务端的socket建立连接 //开始 异步接收服务端传来的信息,同样将socket传入回调方法的参数中 /// 一旦服务器发送信息,则会触发回调方法 //读取从服务器端传来的数据,EndReceive是关闭异步接收方法,同时读取数据 //接受完服务端的数据后的逻辑 // 递归监听服务器端是否发来信息,一旦服务器再次发送信息,客户端仍然可以接收到

 本章简单介绍了关于NetworkStream以及其周边的一些衍生知识,这些知识的重要性不言而喻,从Tcp/IP协议到期分层结构,

  期间感谢大家的关注,今后我会写新的系列,请大家多多鼓励

我要回帖

更多关于 showIParp详解 的文章

 

随机推荐