`
isiqi
  • 浏览: 16826854 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C#网络编程初探

阅读更多
导读:
  我们知道C#和C++的差异之一,就是他本身没有类库,所使用的类库是.Net框架中的类库--.Net FrameWork SDK。在.Net FrameWork SDK中为网络编程提供了二个名称空间:"System.Net"和"System.Net.Sockets"。C#就是通过这二个名称空间中封装的类和方法实现网络通讯的。
  首先我们解释一下在网络编程时候,经常遇到的几个概念:同步(synchronous)、异步(asynchronous)、阻塞(Block)和非阻塞(Unblock):
  所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。而阻塞套接字是指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用StreamReader 类的Readlin ( )方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此Readlin ( )方法将一直挂在调用上,直到读到一些数据,此函数调用才返回;而非阻塞套接字是指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。同样调用StreamReader 类的Readlin ( )方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在Windows网络通信软件开发中,最为常用的方法就是异步非阻塞套接字。平常所说的C/S(客户端/服务器)结构的软件采用的方式就是异步非阻塞模式的。
  其实在用C#进行网络编程中,我们并不需要了解什么同步、异步、阻塞和非阻塞的原理和工作机制,因为在.Net FrameWrok SDK中已经已经把这些机制给封装好了。下面我们就用C#开一个具体的网络程序来说明一下问题。
  一.本文中介绍的程序设计及运行环境
  (1).微软视窗2000 服务器版
  (2)..Net Framework SDK Beta 2以上版本
  二.服务器端程序设计的关键步骤以及解决办法:
  在下面接受的程序中,我们采用的是异步阻塞的方式。
  (1).首先要要在给定的端口上面创建一个"tcpListener"对象侦听网络上面的请求。当接收到连结请求后通过调用"tcpListener"对象的"AcceptSocket"方法产生一个用于处理接入连接请求的Socket的实例。下面是具体实现代码:
  //创建一个tcpListener对象,此对象主要是对给定端口进行侦听
  tcpListener = new TcpListener ( 1234 ) ;
  //开始侦听
  tcpListener.Start ( ) ;
  //返回可以用以处理连接的Socket实例
  socketForClient = tcpListener.AcceptSocket ( ) ;
  (2).接受和发送客户端数据:
  此时Socket实例已经产生,如果网络上有请求,在请求通过以后,Socket实例构造一个"NetworkStream"对象,"NetworkStream"对象为网络访问提供了基础数据流。我们通过名称空间"System.IO"中封装的二个类"StreamReader"和"StreamWriter"来实现对"NetworkStream"对象的访问。其中"StreamReader"类中的ReadLine ( )方法就是从"NetworkStream"对象中读取一行字符;"StreamWriter"类中的WriteLine ( )方法就是对"NetworkStream"对象中写入一行字符串。从而实现在网络上面传输字符串,下面是具体的实现代码:
  try
  {
  //如果返回值是"true",则产生的套节字已经接受来自远方的连接请求
  if ( socketForClient.Connected )
  {
  ListBox1.Items.Add ( "已经和客户端成功连接!" ) ;
  while ( true )
  {
  //创建networkStream对象通过网络套节字来接受和发送数据
  networkStream = new NetworkStream ( socketForClient ) ;
  //从当前数据流中读取一行字符,返回值是字符串
  streamReader = new StreamReader ( networkStream ) ;
  string msg = streamReader.ReadLine ( ) ;
  ListBox1.Items.Add ( "收到客户端信息:" + msg ) ;
  streamWriter = new StreamWriter ( networkStream ) ;
  if ( textBox1.Text != "" )
  {
  ListBox1.Items.Add ( "往客户端反馈信息:" + textBox1.Text ) ;
  //往当前的数据流中写入一行字符串
  streamWriter.WriteLine ( textBox1.Text ) ;
  //刷新当前数据流中的数据
  streamWriter.Flush ( ) ;
  }
  }
  }
  }
  catch ( Exception ey )
  {
  MessageBox.Show ( ey.ToString ( ) ) ;
  }
  (3).最后别忘了要关闭所以流,停止侦听网络,关闭套节字,具体如下:
  //关闭线程和流
  networkStream.Close ( ) ;
  streamReader.Close ( ) ;
  streamWriter.Close ( ) ;
  _thread1.Abort ( ) ;
  tcpListener.Stop ( ) ;
  socketForClient.Shutdown ( SocketShutdown.Both ) ;
  socketForClient.Close ( ) ;
  三.C#网络编程服务器端程序的部分源代码(server.cs)
  由于在此次程序中我们采用的结构是异步阻塞方式,所以在实际的程序中,为了不影响服务器端程序的运行速度,我们在程序中设计了一个线程,使得对网络请求侦听,接受和发送数据都在线程中处理,请在下面的代码中注意这一点,下面是server.cs的完整代码:
  using System ;
  using System.Drawing ;
  using System.Collections ;
  using System.ComponentModel ;
  using System.Windows.Forms ;
  using System.Data ;

本文转自
http://study.qqcf.com/web/224/23985.htm
分享到:
评论

相关推荐

    C#网络编程C#网络编程初探

    ### C#网络编程初探——理解关键概念与实践 #### 一、基础知识 **C#**作为一种现代化的面向对象编程语言,与C++等其他语言相比有着显著的不同之处。其中一个重要区别在于,C#并不自带类库,而是依赖于.NET框架提供...

    c#网络编程初探

    ### C#网络编程初探——Socket详解 #### 一、引言 随着互联网技术的不断发展,网络编程成为了软件开发中不可或缺的一部分。对于.NET开发者来说,掌握C#中的网络编程技术尤为重要。本文旨在深入探讨C#中的网络编程...

    C#网络编程初探[参照].pdf

    《C#网络编程初探》 C#作为.NET框架的核心语言,其网络编程能力主要依赖于.NET Framework SDK提供的类库。在SDK中,有两个关键的命名空间用于网络编程,即"System.Net"和"System.Net.Sockets"。这两个命名空间提供...

    C#网络编程初探(PDF格式)

    ### C#网络编程初探知识点解析 #### 一、引言 C#作为一种现代的面向对象编程语言,凭借其简洁的语法和强大的.NET框架支持,在软件开发领域内得到了广泛的应用。尤其是在网络编程方面,C#提供了丰富的API和工具,...

    C#网络编程初探.pdf

    ### C#网络编程基础知识 #### 一、C#与.NET Framework的关系 C#是一种现代的、面向对象的编程语言,它被设计成易于学习且功能强大。与C++不同,C#自身并没有内置的类库,而是依赖于.NET Framework提供的类库。这...

    C #网络编程初探适应网络开发人员

    C#网络编程初探主要涉及的是使用C#语言在.NET框架下进行网络通信的基本概念和技术。C#本身并不包含内置的类库,而是依赖于.NET Framework SDK提供的类库进行网络编程。在这个SDK中,有两个关键的命名空间对于网络...

    C_网络编程初探C_网络编程初探

    ### C网络编程初探:深入理解C#网络编程的核心概念与实践 在探索C#网络编程的世界里,首要任务是理解其与C++等其他语言的显著差异——C#依赖于.NET Framework SDK作为其核心类库,特别是针对网络编程部分,系统提供...

    C#GHI+编程初探.pdf

    ### C#下的GDI+编程基础 随着C#语言的发布,Microsoft推出了众多新的概念和技术,其中GDI+(Graphics Device Interface Plus)是一项重要的技术进步。GDI+是从原有的GDI(Graphics Device Interface)发展而来的,...

    C# 入门初探.

    C# 是一种面向对象的编程语言,由微软公司开发,主要用于构建Windows应用程序、Web应用程序以及游戏等。在本文中,我们将深入探讨C#的基础知识,包括`using`、`namespace`、`class`以及`Main()`函数和`Console....

    C# 2.0 套接字编程实例初探.pdf

    ### C# 2.0 套接字编程实例初探 #### 一、套接字编程基础 在计算机网络中,套接字(Socket)是一种用于实现不同主机间应用程序通信的编程接口。它允许应用程序之间通过网络进行双向数据传输。在C# 2.0中,开发人员...

    初探c#教程.rar

    总之,"初探C#教程.rar"这个压缩包很可能是针对C#编程初学者的一系列学习资料,涵盖C#的基础语法、.NET框架的使用以及面向对象编程等关键知识点。通过学习这些内容,初学者可以逐步建立起对C#编程的全面认识,并为...

    基于VS2010的C#车牌识别软件编程模板框架:学习程序套路,轻松入门编程之旅,基于VS2010的C#车牌识别软件编程模板框架:学习程序套路,轻松入门,车牌识别软件编程模板框架 ,VS2010可编译运

    此外,HTML格式的“标题踏足编程之路初识车”和“标题基于的车牌识别软件编程入门指南使用与”为学习者提供了在线学习的途径,方便通过网络进行学习和交流。 值得注意的是,本编程模板框架还包含了车牌识别软件编程...

    《初探 C# 2.0》PPT和演示代码

    大连.Net俱乐部首次活动,《初探 C# 2.0》PPT和演示代码,主要介绍了:泛型编程(用具体的测试数字比较了泛型编程和非泛型编程)、迭代器、空属类型、局部类型、匿名方法、静态类、属性访问的保护级别;感觉还不错,讲的...

    C#基础系列:异步编程初探async和await

    确实,没有异步的多线程是单调的、乏味的,async和await是出现在C#5.0之后,它的出现给了异步并行变成带来了很大的方便。异步编程涉及到的东西还是比较多,本篇还是先介绍下async和await的原理及简单实现。  了解...

    Thrift初探:简单实现C#通讯服务程序

    对于C#,它会生成服务接口、数据结构类以及一个处理网络通信的TChannel类。 1. **创建Thrift IDL文件** 在项目中创建一个名为`MyService.thrift`的文件,定义服务接口。例如: ``` service MyService { string ...

    C#小程序拼图

    同时,可能还需要用到交换元素、查找匹配位置等算法,这些都是C#编程的基础知识。 在设计用户界面时,WinForms提供了多种控件供开发者选择,如PictureBox用于显示图片,Button用于交互等。开发者可以通过设置控件的...

    c#初探学习

    ### C# WinForm 初探学习 #### 一、实验目的 本次实验旨在通过实践让初学者对C# WinForm编程有一个基本的认识。具体目标包括: 1. **了解WinForm编程的基本流程和步骤**:这有助于新手理解如何构建基于Windows的...

    C#中使用正则表达式初探

    在软件开发领域,正则表达式是一种非常强大的文本处理工具,被广泛应用于各种编程语言中。本文将详细介绍如何在C#中运用正则表达式,并通过实例来解释其基本用法以及一些高级特性。 #### 一、正则表达式基础 在C#...

    C#开发实战宝典.(清华出版.王小科等).part1

     全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件...

Global site tag (gtag.js) - Google Analytics