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

来源:互联网 发布:linux退出vi命令 编辑:程序博客网 时间:2024/05/04 04:05

    在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项目中用到的重要知识点:多线程编程和事件编程,敬请关注。

原创粉丝点击