X教授  

      背景:

      有两台计算机,一台为数据源服务器(提供数据服务),另一台为数据接收服务器(数据消费者),两者之间已经建立了TCP Socket的连接。现在主要讨论接收方接收数据的情况。

      .net平台下接收方接收数据时有三种方式。在此之前要明白流的概念,流是字节序列的抽象,呵呵,确实有点难理解,不过大家记住一点,流是字节序列相关的,说白了在计算机中的表现是与字节数组相关(比如,NetworkStream与Socket的接收数据缓存相关联,默认大小是一个8192字节大小的接收缓冲区),也许我这种说法不全对,你可以试着这样理解。

    第一种,直接用建立的Socket连接实例调用Receive()或BeginReceive()接收数据。

    第二种用网络流的方式接收,即用NetworkStream流实例的Read()与BeginRead()数据,在创建NetworkStream实例时以建立的Socket做为参数(new  NetworkStream(已建立的Socket,...);,主要是为了与Socket的接收缓存相关联。

   第三种方式,用BufferedStream再串接一下NetworkStream流。大家首先要明白BufferedStream的作用,它是为另一种流再提供一个缓冲区,默认大小为4096字节大小,从其构造函数可以看出。这样其它流就有两个缓冲区,一个是流本身有的,另一个是BufferedStream提供的。所以用BufferedStream串接NetworkStream流后,再用BufferedStream实例的Read()或BeginRead()读取数据会提高性能。

   三种方式的性能比较:第一种和第二种速度相当,都是用的同一个缓冲区,第二种做法只是为了对流操作提供一个统一的接口,并没有性能上的提高,仅个人看法,希望高手指点。第三种方式,的接收性能要优于前两种。

     由于现在有事,写得有点简短。呵呵!

posted on 2010-09-25 19:34  X教授  阅读(1880)  评论(0编辑  收藏  举报