SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(一)——准备知识(Socket编程)

news/2024/5/17 15:14:14 标签: socket, 服务器, 编程, tcp, internet, 网络应用

    在C#中,构建一个简单的通信程序是非常简单的,因为.NET Framework已经为我们的应用程序提供了System.Net和System.Net.Sockets命名空间,并可以通过引用这两个命名空间开发出多种网络应用程序。

    通过查阅MSDN,可以非常清晰地知道,Socket提供了非常多的方法和属性等,在数据的发送及接收方面,既有同步方式,也有异步方式。在数据发送方面比较常用的像Send、SendTo、BeginSend/EndSend等,在数据接收方面比较常用的像Receive、ReceiveFrom、BeginReceive/EndReceive等。

    为此,要构建Socket通信程序,无非是要经过以下几步即可完成:

    1、创建Socket对象实例,并指派通信协议(通常使用TCP协议或UDP协议),下面的示例为创建了一个基于TCP协议的Socket对象实例。

    2、绑定所指定的端口,使得刚创建的Socket对象与一个本地终结点相关联,如下所示:

   3、绑定本地终结点之后,如果采用的是TCP协议,则可以开始进行侦听(socket.Listen(10);),而如果是UDP协议,当然是不需要进行侦听的。

    4、如果是服务器,则会不断地侦听是否有客户端的请求,并考虑是否接收该请求(这里可以通过设置最大连接数来进行控制),并在接收到客户端请求后开始接收数据和发送数据的处理。这里会有一个问题,如果采用同步处理的方式,那么侦听客户端请求与接收/发送数据将会混在一起,处理的时间可能会过长,致使有些客户端连接不上服务器,造成阻塞的现象。为此,通常的做法是采用异步接收数据和异步发送数据的方式来处理。基于这样的考虑,笔者将会在构建服务器通信程序时采用异步接收和异步发送的方式来处理客户端的请求。

    5、如果是客户端,则处理方式可以更灵活一点,既可以采用异步方式也可以采用同步方式,这要看具体的应用场景而定。不过在发送和接收数据的处理方面,其实都与服务器大同小异,因为不管是服务器还是客户端均使用的是Socket编程,调用的都是Socket类现有的方法。

 

    此外,我们还会发现,在.NET中,还有TCPClient、TCPListener 和 UDPClient这几个类,这些类封装了有关创建到Internet的TCP和UDP连接的详细信息,它们都是建立在Socket的实现之上的。

    在Socket编程中,不管是创建Socket还是进行侦听,或发送/接收数据,都需要对可能发送的Socket异常进行捕获。

    关于更多的Socket编程方面的知识,除了从MSDN、网络等处获取资源外,还可以阅读笔者曾经编写的一个小程序利用C#进行Socket通信编程之二:一个实例。基本的知识在这里只做简单介绍,在后面一篇文章中将简要介绍在SharpStreaming项目中用到的重要知识点:多线程编程和事件编程,敬请关注。


http://www.niftyadmin.cn/n/1863392.html

相关文章

SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(二)——准备知识(事件编程)

本篇文章将简要介绍事件编程的相关基本知识。在开发程序时,事件对我们而言是经常接触的一个概念,比如鼠标事件、键盘事件等等。在这里要介绍的不仅仅是局限于一些系统定义的事件,更应该关注利用事件返回一些自定义数据。 在MSDN中对事件的定义…

SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(三)——准备知识(多线程编程)

本篇文章将简要介绍多线程编程的一些基础知识。多线程编程是很多程序开发特别是服务器开发方面经常会使用的重要技术。 在.NET中,System.Threading命名空间提供了大量的类和接口来支持多线程编程。查阅MSDN,对Thread类有这样的描述:创建并控制…

SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(四)——总体结构设计(服务器端)

SharpStreaming项目包含两个子项目,分别为SharpStreamingServer和SharpStreamingClient,按照通常的做法是对每一个项目做分别的开发,待项目开发完毕后才最后集成。很显然,这种方式似乎并不适合于本项目的开发,因为服务…

在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用

当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作。在上述提到的中间件组件中,其中一个是非常受欢迎的FreeRTOS实时操作系统,Nabto正在努力建立一个强…

利用DirectShow开发C#版的音频文件播放器(补充完善)

继今年三月份利用DirectShow开发C#版的音频文件播放器(三)文章之后,一直希望对这个音频文件播放器所存在的一些问题做修改完善,可惜一直忙于工作而无暇顾及这个事情。近日,有读者朋友提到了这个问题,现特别…

SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(五)——总体结构设计(客户端)

本篇文章介绍客户端的总体结构设计。相对于服务器而言,客户端的总体结构相对简单一点,当然对于播放模块可能是个例外,因为目前对这一块还存在很多的未知部分。 客户端的主要工作就是连接上服务器,然后向服务器发送各种请求并等待服…

SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(六)——服务器通信部分初步实现

本篇文章将介绍服务器通信部分的核心代码实现。 首先从整体来看,服务器在启动时要创建套接字并开始不断地进行侦听,一旦有新的客户端连接,将会创建一个客户端会话实例并通过该会话实例管理自己的套接字,同时采用异步方式来实现数据…

做好项目管理,项目经理应当掌握哪些技能?

要做好项目管理,虽说没有难于上青天那么夸张,但从当前现状来说,项目管理的难度也确实不小。那么,怎样才能做好项目管理,对于项目经理来说,可以从哪些方面去打磨自己的项目管理能力?一个合格的项…