文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>BufferedStream类 - asp.net 教程-

BufferedStream类 - asp.net 教程-

时间:2010-08-26  来源:星空3

 

BufferedStream 类

给另一流上的读写操作添加一个缓冲层。无法继承此类。

命名空间:System.IO
程序集:mscorlib(在 mscorlib.dll 中)

缓冲区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。缓冲区可提高读取和写入性能。使用缓冲区可进行读取或写入,但不能同时进行这两种操作。BufferedStream 的 ReadWrite 方法自动维护缓冲区。

BufferedStream 可写在某些类型的流周围。它提供从基础数据源或储存库读取字节以及将字节写入基础数据源或储存库的实现。使用 BinaryReaderBinaryWriter 读取和写入其他数据类型。BufferedStream 用于在不需要缓冲区时防止缓冲区降低输入和输出速度。如果您读取和写入的大小始终大于内部缓冲区的大小,那么 BufferedStream 可能甚至无法分配内部缓冲区。BufferedStream 也在共享缓冲区中缓冲读取和写入。假设您几乎始终执行一系列读取或写入操作,而很少在读取和写入之间切换。

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? "> 示例

下面的代码示例说明如何在 NetworkStream 类之上使用 BufferedStream 类,以提高某些 I/O 操作的性能。启动客户端之前,先在远程计算机上启动服务器。启动客户端时,将远程计算机名指定为一个命令行参数。改变 dataArraySize 和 streamBufferSize 常数,以查看它们对性能的影响。

Visual Basic

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

' Compile using /r:System.dll.

Imports Microsoft.VisualBasic

Imports System

Imports System.IO

Imports System.Globalization

Imports System.Net

Imports System.Net.Sockets

 

Public Class Client

 

    Const dataArraySize As Integer    =   100

    Const streamBufferSize As Integer =  1000

    Const numberOfLoops As Integer    = 10000

 

    Shared Sub Main(args As String())

   

        ' Check that an argument was specified when the

        ' program was invoked.

        If args.Length = 0 Then

            Console.WriteLine("Error: The name of the host " & _

                "computer must be specified when the program " & _

                "is invoked.")

            Return

        End If

 

        Dim remoteName As String = args(0)

 

        ' Create the underlying socket and connect to the server.

        Dim clientSocket As New Socket(AddressFamily.InterNetwork, _

            SocketType.Stream, ProtocolType.Tcp)

 

        clientSocket.Connect(New IPEndPoint( _

            Dns.Resolve(remoteName).AddressList(0), 1800))

 

        Console.WriteLine("Client is connected." & vbCrLf)

 

        ' Create a NetworkStream that owns clientSocket and then

        ' create a BufferedStream on top of the NetworkStream.

        Dim netStream As New NetworkStream(clientSocket, True)

        Dim bufStream As New _

            BufferedStream(netStream, streamBufferSize)

       

        Try

            ' Check whether the underlying stream supports seeking.

            If bufStream.CanSeek Then

                Console.WriteLine("NetworkStream supports" & _

                    "seeking." & vbCrLf)

            Else

                Console.WriteLine("NetworkStream does not " & _

                    "support seeking." & vbCrLf)

            End If

 

            ' Send and receive data.

            If bufStream.CanWrite Then

                SendData(netStream, bufStream)

            End If           

            If bufStream.CanRead Then

                ReceiveData(netStream, bufStream)

            End If

        Finally

 

            ' When bufStream is closed, netStream is in turn

            ' closed, which in turn shuts down the connection

            ' and closes clientSocket.

            Console.WriteLine(vbCrLf & "Shutting down the connection.")

            bufStream.Close()

        End Try

    End Sub

 

    Shared Sub SendData(netStream As Stream, bufStream As Stream)

   

        Dim startTime As DateTime

        Dim networkTime As Double, bufferedTime As Double

 

        ' Create random data to send to the server.

        Dim dataToSend(dataArraySize - 1) As Byte

        Dim randomGenerator As New Random()

        randomGenerator.NextBytes(dataToSend)

 

        ' Send the data using the NetworkStream.

        Console.WriteLine("Sending data using NetworkStream.")

        startTime = DateTime.Now

        For i As Integer = 1 To numberOfLoops

            netStream.Write(dataToSend, 0, dataToSend.Length)

        Next i

        networkTime = DateTime.Now.Subtract(startTime).TotalSeconds

        Console.WriteLine("{0} bytes sent in {1} seconds." & vbCrLf, _

            numberOfLoops * dataToSend.Length, _

            networkTime.ToString("F1"))

 

        ' Send the data using the BufferedStream.

        Console.WriteLine("Sending data using BufferedStream.")

        startTime = DateTime.Now

        For i As Integer = 1 To numberOfLoops

            bufStream.Write(dataToSend, 0, dataToSend.Length)

        Next i

       

        bufStream.Flush()

        bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds

        Console.WriteLine("{0} bytes sent In {1} seconds." & vbCrLf, _

            numberOfLoops * dataToSend.Length, _

            bufferedTime.ToString("F1"))

 

        ' Print the ratio of write times.

        Console.Write("Sending data using the buffered " & _

            "network stream was {0}", _

            (networkTime/bufferedTime).ToString("P0"))

        If bufferedTime < networkTime Then

            Console.Write(" faster")

        Else

            Console.Write(" slower")

        End If

        Console.WriteLine(" than using the network stream alone.")

    End Sub

 

    Shared Sub ReceiveData(netStream As Stream, bufStream As Stream)

   

        Dim startTime As DateTime

        Dim networkTime As Double, bufferedTime As Double = 0

 

        Dim bytesReceived As Integer = 0

        Dim receivedData(dataArraySize - 1) As Byte

 

        ' Receive data using the NetworkStream.

        Console.WriteLine("Receiving data using NetworkStream.")

        startTime = DateTime.Now

        While bytesReceived < numberOfLoops * receivedData.Length

            bytesReceived += netStream.Read( _

                receivedData, 0, receivedData.Length)

        End While

        networkTime = DateTime.Now.Subtract(startTime).TotalSeconds

        Console.WriteLine("{0} bytes received in {1} " & _

            "seconds." & vbCrLf, _

            bytesReceived.ToString(), _

            networkTime.ToString("F1"))

 

        ' Receive data using the BufferedStream.

        Console.WriteLine("Receiving data using BufferedStream.")

        bytesReceived = 0

        startTime = DateTime.Now

        While bytesReceived < numberOfLoops * receivedData.Length

            bytesReceived += bufStream.Read( _

                receivedData, 0, receivedData.Length)

        End While

        bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds

        Console.WriteLine("{0} bytes received in {1} " & _

            "seconds." & vbCrLf, _

            bytesReceived.ToString(), _

            bufferedTime.ToString("F1"))

 

        ' Print the ratio of read times.

        Console.Write("Receiving data using the buffered " & _

            "network stream was {0}", _

            (networkTime/bufferedTime).ToString("P0"))

        If bufferedTime < networkTime Then

            Console.Write(" faster")

        Else

            Console.Write(" slower")

        End If

        Console.WriteLine(" than using the network stream alone.")

    End Sub

End Class

C#

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

using System;

using System.IO;

using System.Globalization;

using System.Net;

using System.Net.Sockets;

 

public class Client

{

    const int dataArraySize    =   100;

    const int streamBufferSize =  1000;

    const int numberOfLoops    = 10000;

 

    static void Main(string[] args)

    {

        // Check that an argument was specified when the

        // program was invoked.

        if(args.Length == 0)

        {

            Console.WriteLine("Error: The name of the host computer" +

                " must be specified when the program is invoked.");

            return;

        }

 

        string remoteName = args[0];

 

        // Create the underlying socket and connect to the server.

        Socket clientSocket = new Socket(AddressFamily.InterNetwork,

            SocketType.Stream, ProtocolType.Tcp);

 

        clientSocket.Connect(new IPEndPoint(

            Dns.Resolve(remoteName).AddressList[0], 1800));

 

        Console.WriteLine("Client is connected.\n");

 

        // Create a NetworkStream that owns clientSocket and

        // then create a BufferedStream on top of the NetworkStream.

        // Both streams are disposed when execution exits the

        // using statement.

        using(Stream

            netStream = new NetworkStream(clientSocket, true),

            bufStream =

                  new BufferedStream(netStream, streamBufferSize))

        {

            // Check whether the underlying stream supports seeking.

            Console.WriteLine("NetworkStream {0} seeking.\n",

                bufStream.CanSeek ? "supports" : "does not support");

 

            // Send and receive data.

            if(bufStream.CanWrite)

            {

                SendData(netStream, bufStream);

            }

            if(bufStream.CanRead)

            {

                ReceiveData(netStream, bufStream);

            }

 

            // When bufStream is closed, netStream is in turn

            // closed, which in turn shuts down the connection

            // and closes clientSocket.

            Console.WriteLine("\nShutting down the connection.");

            bufStream.Close();

        }

    }

 

    static void SendData(Stream netStream, Stream bufStream)

    {

        DateTime startTime;

        double networkTime, bufferedTime;

 

        // Create random data to send to the server.

        byte[] dataToSend = new byte[dataArraySize];

        new Random().NextBytes(dataToSend);

 

        // Send the data using the NetworkStream.

        Console.WriteLine("Sending data using NetworkStream.");

        startTime = DateTime.Now;

        for(int i = 0; i < numberOfLoops; i++)

        {

            netStream.Write(dataToSend, 0, dataToSend.Length);

        }

        networkTime = (DateTime.Now - startTime).TotalSeconds;

        Console.WriteLine("{0} bytes sent in {1} seconds.\n",

            numberOfLoops * dataToSend.Length,

            networkTime.ToString("F1"));

 

        // Send the data using the BufferedStream.

        Console.WriteLine("Sending data using BufferedStream.");

        startTime = DateTime.Now;

        for(int i = 0; i < numberOfLoops; i++)

        {

            bufStream.Write(dataToSend, 0, dataToSend.Length);

        }

        bufStream.Flush();

        bufferedTime = (DateTime.Now - startTime).TotalSeconds;

        Console.WriteLine("{0} bytes sent in {1} seconds.\n",

            numberOfLoops * dataToSend.Length,

            bufferedTime.ToString("F1"));

 

        // Print the ratio of write times.

        Console.WriteLine("Sending data using the buffered " +

            "network stream was {0} {1} than using the network " +

            "stream alone.\n",

            (networkTime/bufferedTime).ToString("P0"),

            bufferedTime < networkTime ? "faster" : "slower");

    }

 

    static void ReceiveData(Stream netStream, Stream bufStream)

    {

        DateTime startTime;

        double networkTime, bufferedTime = 0;

        int bytesReceived = 0;

        byte[] receivedData = new byte[dataArraySize];

 

        // Receive data using the NetworkStream.

        Console.WriteLine("Receiving data using NetworkStream.");

        startTime = DateTime.Now;

        while(bytesReceived < numberOfLoops * receivedData.Length)

        {

            bytesReceived += netStream.Read(

                receivedData, 0, receivedData.Length);

        }

        networkTime = (DateTime.Now - startTime).TotalSeconds;

        Console.WriteLine("{0} bytes received in {1} seconds.\n",

            bytesReceived.ToString(),

            networkTime.ToString("F1"));

 

        // Receive data using the BufferedStream.

        Console.WriteLine("Receiving data using BufferedStream.");

        bytesReceived = 0;

        startTime = DateTime.Now;

        while(bytesReceived < numberOfLoops * receivedData.Length)

        {

            bytesReceived += bufStream.Read(

                receivedData, 0, receivedData.Length);

        }

        bufferedTime = (DateTime.Now - startTime).TotalSeconds;

        Console.WriteLine("{0} bytes received in {1} seconds.\n",

            bytesReceived.ToString(),

            bufferedTime.ToString("F1"));

 

        // Print the ratio of read times.

        Console.WriteLine("Receiving data using the buffered network" +

            " stream was {0} {1} than using the network stream alone.",

            (networkTime/bufferedTime).ToString("P0"),

            bufferedTime < networkTime ? "faster" : "slower");

    }

}

C++

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

#using <system.dll>

 

using namespace System;

using namespace System::IO;

using namespace System::Globalization;

using namespace System::Net;

using namespace System::Net::Sockets;

static const int streamBufferSize = 1000;

public ref class Client

{

private:

   literal int dataArraySize = 100;

   literal int numberOfLoops = 10000;

   Client(){}

 

 

public:

   static void ReceiveData( Stream^ netStream, Stream^ bufStream )

   {

      DateTime startTime;

      Double networkTime;

      Double bufferedTime = 0;

      int bytesReceived = 0;

      array<Byte>^receivedData = gcnew array<Byte>(dataArraySize);

     

      // Receive data using the NetworkStream.

      Console::WriteLine( "Receiving data using NetworkStream." );

      startTime = DateTime::Now;

      while ( bytesReceived < numberOfLoops * receivedData->Length )

      {

         bytesReceived += netStream->Read( receivedData, 0, receivedData->Length );

      }

 

      networkTime = (DateTime::Now - startTime).TotalSeconds;

      Console::WriteLine( "{0} bytes received in {1} seconds.\n", bytesReceived.ToString(), networkTime.ToString(  "F1" ) );

     

      // Receive data using the BufferedStream.

      Console::WriteLine(  "Receiving data using BufferedStream." );

      bytesReceived = 0;

      startTime = DateTime::Now;

      while ( bytesReceived < numberOfLoops * receivedData->Length )

      {

         bytesReceived += bufStream->Read( receivedData, 0, receivedData->Length );

      }

 

      bufferedTime = (DateTime::Now - startTime).TotalSeconds;

      Console::WriteLine( "{0} bytes received in {1} seconds.\n", bytesReceived.ToString(), bufferedTime.ToString(  "F1" ) );

     

      // Print the ratio of read times.

      Console::WriteLine( "Receiving data using the buffered "

      "network stream was {0} {1} than using the network "

      "stream alone.", (networkTime / bufferedTime).ToString(  "P0" ), bufferedTime < networkTime ? (String^)"faster" : "slower" );

   }

 

   static void SendData( Stream^ netStream, Stream^ bufStream )

   {

      DateTime startTime;

      Double networkTime;

      Double bufferedTime;

     

      // Create random data to send to the server.

      array<Byte>^dataToSend = gcnew array<Byte>(dataArraySize);

      (gcnew Random)->NextBytes( dataToSend );

     

      // Send the data using the NetworkStream.

      Console::WriteLine( "Sending data using NetworkStream." );

      startTime = DateTime::Now;

      for ( int i = 0; i < numberOfLoops; i++ )

      {

         netStream->Write( dataToSend, 0, dataToSend->Length );

 

      }

      networkTime = (DateTime::Now - startTime).TotalSeconds;

      Console::WriteLine( "{0} bytes sent in {1} seconds.\n", (numberOfLoops * dataToSend->Length).ToString(), networkTime.ToString(  "F1" ) );

     

      // Send the data using the BufferedStream.

      Console::WriteLine( "Sending data using BufferedStream." );

      startTime = DateTime::Now;

      for ( int i = 0; i < numberOfLoops; i++ )

      {

         bufStream->Write( dataToSend, 0, dataToSend->Length );

 

      }

      bufStream->Flush();

      bufferedTime = (DateTime::Now - startTime).TotalSeconds;

      Console::WriteLine( "{0} bytes sent in {1} seconds.\n", (numberOfLoops * dataToSend->Length).ToString(), bufferedTime.ToString(  "F1" ) );

     

      // Print the ratio of write times.

      Console::WriteLine( "Sending data using the buffered "

      "network stream was {0} {1} than using the network "

      "stream alone.\n", (networkTime / bufferedTime).ToString(  "P0" ), bufferedTime < networkTime ? (String^)"faster" : "slower" );

   }

 

};

 

int main( int argc, char *argv[] )

{

  

   // Check that an argument was specified when the

   // program was invoked.

   if ( argc == 1 )

   {

      Console::WriteLine( "Error: The name of the host computer"

      " must be specified when the program is invoked." );

      return  -1;

   }

 

   String^ remoteName = gcnew String( argv[ 1 ] );

  

   // Create the underlying socket and connect to the server.

   Socket^ clientSocket = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

   clientSocket->Connect( gcnew IPEndPoint( Dns::Resolve( remoteName )->AddressList[ 0 ],1800 ) );

   Console::WriteLine(  "Client is connected.\n" );

  

   // Create a NetworkStream that owns clientSocket and

   // then create a BufferedStream on top of the NetworkStream.

   NetworkStream^ netStream = gcnew NetworkStream( clientSocket,true );

   BufferedStream^ bufStream = gcnew BufferedStream( netStream,streamBufferSize );

  

   try

   {

     

      // Check whether the underlying stream supports seeking.

      Console::WriteLine( "NetworkStream {0} seeking.\n", bufStream->CanSeek ? (String^)"supports" : "does not support" );

     

      // Send and receive data.

      if ( bufStream->CanWrite )

      {

         Client::SendData( netStream, bufStream );

      }

     

      if ( bufStream->CanRead )

      {

         Client::ReceiveData( netStream, bufStream );

      }

     

   }

   finally

   {

     

      // When bufStream is closed, netStream is in turn closed,

      // which in turn shuts down the connection and closes

      // clientSocket.

      Console::WriteLine( "\nShutting down connection." );

      bufStream->Close();

     

   }

 

}

 

J#

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

import System.*;

import System.IO.*;

import System.Globalization.*;

import System.Net.*;

import System.Net.Sockets.*;

 

public class Client

{

    private static int dataArraySize = 100;

    private static int streamBufferSize = 1000;

    private static int numberOfLoops = 10000;

 

    public static void main(String[] args)

    {

        // Check that an argument was specified when the

        // program was invoked.

        if ( args.length == 0 ) {

            Console.WriteLine(("Error: The name of the host computer"

                + " must be specified when the program is invoked."));

            return;

        }

        String remoteName = args[0];

 

        // Create the underlying socket and connect to the server.

        Socket clientSocket =  new Socket(AddressFamily.InterNetwork,

            SocketType.Stream, ProtocolType.Tcp);

 

        clientSocket.Connect(

            new IPEndPoint(Dns.Resolve(remoteName).get_AddressList()[0], 1800));

 

        Console.WriteLine("Client is connected.\n");

 

        // Create a NetworkStream that owns clientSocket and

        // then create a BufferedStream on top of the NetworkStream.

        // Both streams are disposed when execution exits the

        // using statement.

 

        Stream netStream = new NetworkStream(clientSocket, true);

        Stream bufStream = new BufferedStream(netStream, streamBufferSize);

        try {

            try {

                // Check whether the underlying stream supports seeking.

                Console.WriteLine("NetworkStream {0} seeking.\n",

                    (bufStream.get_CanSeek())? "supports" : "does not support");

                // Send and receive data.

                if ( bufStream.get_CanWrite()  ) {

                    SendData(netStream, bufStream);

                }

                if ( bufStream.get_CanRead()  ) {

                    ReceiveData(netStream, bufStream);

                }

 

                // When execution exits the using statement, netStream

                // is disposed, which in turn shuts down the connection

                // and closes clientSocket.

                Console.WriteLine("\nShutting down the connection.");

            }

            finally {

                netStream.Dispose();

            }

        }

        finally {

            bufStream.Dispose();

        }         

    } //main  

  

    static void SendData(Stream netStream, Stream bufStream)

    {

        DateTime startTime;

        double networkTime,bufferedTime;

 

        // Create random data to send to the server.       

        ubyte dataToSend[] = new ubyte[dataArraySize];

        new Random().NextBytes(dataToSend);

 

        // Send the data using the NetworkStream.

        Console.WriteLine("Sending data using NetworkStream.");

        startTime = DateTime.get_Now();

        for(int i=0;i < numberOfLoops;i++) {

            netStream.Write(dataToSend, 0, dataToSend.length);

        }       

        networkTime =

            ((DateTime.get_Now()).Subtract(startTime)).get_TotalSeconds();

        Console.WriteLine("{0} bytes sent in {1} seconds.\n",

            System.Convert.ToString(numberOfLoops * dataToSend.length),

            ((System.Double) networkTime).ToString("F1"));

 

        // Send the data using the BufferedStream.

        Console.WriteLine("Sending data using BufferedStream.");

        startTime = DateTime.get_Now();

        for(int i=0;i < numberOfLoops;i++) {

            bufStream.Write(dataToSend, 0, dataToSend.length);

        }       

        bufStream.Flush();

        bufferedTime =

            ((DateTime.get_Now()).Subtract(startTime)).get_TotalSeconds();

        Console.WriteLine("{0} bytes sent in {1} seconds.\n",

            System.Convert.ToString (numberOfLoops * dataToSend.length),

            ((System.Double)bufferedTime).ToString("F1"));

 

        // Print the ratio of write times.

        Console.WriteLine("Sending data using the buffered "

            + "network stream was {0} {1} than using the network "

            + "stream alone.\n",

            ((System.Double)(networkTime / bufferedTime)).ToString("P0"),

            (bufferedTime < networkTime) ? "faster" : "slower");

    } //SendData

  

    static void ReceiveData(Stream netStream, Stream bufStream)

    {

        DateTime startTime;

        double bufferedTime = 0;

        double networkTime;

        int bytesReceived = 0;

        ubyte receivedData[] = new ubyte[dataArraySize];

 

        // Receive data using the NetworkStream.

        Console.WriteLine("Receiving data using NetworkStream.");

        startTime = DateTime.get_Now();

        while((bytesReceived < numberOfLoops * receivedData.length)) {

            bytesReceived += netStream.Read(receivedData,0,receivedData.length);

        }

        networkTime =

            ((DateTime.get_Now()).Subtract(startTime)).get_TotalSeconds();

        Console.WriteLine("{0} bytes received in {1} seconds.\n",

            (new Integer(bytesReceived)).ToString(),

            ((System.Double)networkTime).ToString("F1"));

 

        // Receive data using the BufferedStream.

        Console.WriteLine("Receiving data using BufferedStream.");

        bytesReceived = 0;

        startTime = DateTime.get_Now();

        while((bytesReceived < numberOfLoops * receivedData.length)) {

            bytesReceived += bufStream.Read(receivedData,0,receivedData.length);

        }

        bufferedTime =

            ((DateTime.get_Now()).Subtract(startTime)).get_TotalSeconds();

        Console.WriteLine("{0} bytes received in {1} seconds.\n",

            (new Integer(bytesReceived)).ToString(),

            ((System.Double) bufferedTime).ToString("F1"));

 

        // Print the ratio of read times.

        Console.WriteLine("Receiving data using the buffered network"

            + " stream was {0} {1} than using the network stream alone.",

            ((System.Double)(networkTime / bufferedTime)).ToString("P0"),

            (bufferedTime < networkTime) ? "faster" : "slower");

    } //ReceiveData

} //Client

Visual Basic

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

' Compile using /r:System.dll.

Imports Microsoft.VisualBasic

Imports System

Imports System.Net

Imports System.Net.Sockets

 

Public Class Server

 

    Shared Sub Main()

   

        ' This is a Windows Sockets 2 error code.

        Const WSAETIMEDOUT As Integer = 10060

 

        Dim serverSocket As Socket

        Dim bytesReceived As Integer

        Dim totalReceived As Integer = 0

        Dim receivedData(2000000-1) As Byte

 

        ' Create random data to send to the client.

        Dim dataToSend(2000000-1) As Byte

        Dim randomGenerator As New Random()

        randomGenerator.NextBytes(dataToSend)

 

        Dim ipAddress As IPAddress = _

            Dns.Resolve(Dns.GetHostName()).AddressList(0)

 

        Dim ipEndpoint As New IPEndPoint(ipAddress, 1800)

 

        ' Create a socket and listen for incoming connections.

        Dim listenSocket As New Socket(AddressFamily.InterNetwork, _

            SocketType.Stream, ProtocolType.Tcp)

       

        Try

            listenSocket.Bind(ipEndpoint)

            listenSocket.Listen(1)

 

            ' Accept a connection and create a socket to handle it.

            serverSocket = listenSocket.Accept()

            Console.WriteLine("Server is connected." & vbCrLf)

        Finally

            listenSocket.Close()

        End Try

 

        Try

            ' Send data to the client.

            Console.Write("Sending data ... ")

            Dim bytesSent As Integer = serverSocket.Send( _

                dataToSend, 0, dataToSend.Length, SocketFlags.None)

            Console.WriteLine("{0} bytes sent." & vbCrLf, _

                bytesSent.ToString())

 

            ' Set the timeout for receiving data to 2 seconds.

            serverSocket.SetSocketOption(SocketOptionLevel.Socket, _

                SocketOptionName.ReceiveTimeout, 2000)

 

            ' Receive data from the client.

            Console.Write("Receiving data ... ")

            Try

                Do

                    bytesReceived = serverSocket.Receive( _

                        receivedData, 0, receivedData.Length, _

                        SocketFlags.None)

                    totalReceived += bytesReceived

                Loop While bytesReceived <> 0

            Catch e As SocketException

                If(e.ErrorCode = WSAETIMEDOUT)

               

                    ' Data was not received within the given time.

                    ' Assume that the transmission has ended.

                Else

                    Console.WriteLine("{0}: {1}" & vbCrLf, _

                        e.GetType().Name, e.Message)

                End If

            Finally

                Console.WriteLine("{0} bytes received." & vbCrLf, _

                    totalReceived.ToString())

            End Try

        Finally

            serverSocket.Shutdown(SocketShutdown.Both)

            Console.WriteLine("Connection shut down.")

            serverSocket.Close()

        End Try

   

    End Sub

End Class

C#

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

using System;

using System.Net;

using System.Net.Sockets;

 

public class Server

{

    static void Main()

    {

        // This is a Windows Sockets 2 error code.

        const int WSAETIMEDOUT = 10060;

 

        Socket serverSocket;

        int bytesReceived, totalReceived = 0;

        byte[] receivedData = new byte[2000000];

 

        // Create random data to send to the client.

        byte[] dataToSend = new byte[2000000];

        new Random().NextBytes(dataToSend);

 

        IPAddress ipAddress =

            Dns.Resolve(Dns.GetHostName()).AddressList[0];

 

        IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, 1800);

 

        // Create a socket and listen for incoming connections.

        using(Socket listenSocket = new Socket(

            AddressFamily.InterNetwork, SocketType.Stream,

            ProtocolType.Tcp))

        {

            listenSocket.Bind(ipEndpoint);

            listenSocket.Listen(1);

 

            // Accept a connection and create a socket to handle it.

            serverSocket = listenSocket.Accept();

            Console.WriteLine("Server is connected.\n");

        }

 

        try

        {

            // Send data to the client.

            Console.Write("Sending data ... ");

            int bytesSent = serverSocket.Send(

                dataToSend, 0, dataToSend.Length, SocketFlags.None);

            Console.WriteLine("{0} bytes sent.\n",

                bytesSent.ToString());

 

            // Set the timeout for receiving data to 2 seconds.

            serverSocket.SetSocketOption(SocketOptionLevel.Socket,

                SocketOptionName.ReceiveTimeout, 2000);

 

            // Receive data from the client.

            Console.Write("Receiving data ... ");

            try

            {

                do

                {

                    bytesReceived = serverSocket.Receive(receivedData,

                        0, receivedData.Length, SocketFlags.None);

                    totalReceived += bytesReceived;

                }

                while(bytesReceived != 0);

            }

            catch(SocketException e)

            {

                if(e.ErrorCode == WSAETIMEDOUT)

                {

                    // Data was not received within the given time.

                    // Assume that the transmission has ended.

                }

                else

                {

                    Console.WriteLine("{0}: {1}\n",

                        e.GetType().Name, e.Message);

                }

            }

            finally

            {

                Console.WriteLine("{0} bytes received.\n",

                    totalReceived.ToString());

            }

        }

        finally

        {

            serverSocket.Shutdown(SocketShutdown.Both);

            Console.WriteLine("Connection shut down.");

            serverSocket.Close();

        }

    }

}

C++

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? ">复制代码

#using <system.dll>

 

using namespace System;

using namespace System::Net;

using namespace System::Net::Sockets;

int main()

{

  

   // This is a Windows Sockets 2 error code.

   const int WSAETIMEDOUT = 10060;

   Socket^ serverSocket;

   int bytesReceived;

   int totalReceived = 0;

   array<Byte>^receivedData = gcnew array<Byte>(2000000);

  

   // Create random data to send to the client.

   array<Byte>^dataToSend = gcnew array<Byte>(2000000);

   (gcnew Random)->NextBytes( dataToSend );

   IPAddress^ ipAddress = Dns::Resolve( Dns::GetHostName() )->AddressList[ 0 ];

   IPEndPoint^ ipEndpoint = gcnew IPEndPoint( ipAddress,1800 );

  

   // Create a socket and listen for incoming connections.

   Socket^ listenSocket = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

   try

   {

      listenSocket->Bind( ipEndpoint );

      listenSocket->Listen( 1 );

     

      // Accept a connection and create a socket to handle it.

      serverSocket = listenSocket->Accept();

      Console::WriteLine( "Server is connected.\n" );

   }

   finally

   {

      listenSocket->Close();

   }

 

   try

   {

     

      // Send data to the client.

      Console::Write( "Sending data ... " );

      int bytesSent = serverSocket->Send( dataToSend, 0, dataToSend->Length, SocketFlags::None );

      Console::WriteLine( "{0} bytes sent.\n", bytesSent.ToString() );

     

      // Set the timeout for receiving data to 2 seconds.

      serverSocket->SetSocketOption( SocketOptionLevel::Socket, SocketOptionName::ReceiveTimeout, 2000 );

     

      // Receive data from the client.

      Console::Write( "Receiving data ... " );

      try

      {

         do

         {

            bytesReceived = serverSocket->Receive( receivedData, 0, receivedData->Length, SocketFlags::None );

            totalReceived += bytesReceived;

         }

         while ( bytesReceived != 0 );

      }

      catch ( SocketException^ e )

      {

         if ( e->ErrorCode == WSAETIMEDOUT )

         {

           

            // Data was not received within the given time.

            // Assume that the transmission has ended.

         }

         else

         {

            Console::WriteLine( "{0}: {1}\n", e->GetType()->Name, e->Message );

         }

      }

      finally

      {

         Console::WriteLine( "{0} bytes received.\n", totalReceived.ToString() );

      }

 

   }

   finally

   {

      serverSocket->Shutdown( SocketShutdown::Both );

      Console::WriteLine( "Connection shut down." );

      serverSocket->Close();

   }

 

}

 

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? "> 继承层次结构

System.Object
   System.MarshalByRefObject
     System.IO.Stream
      System.IO.BufferedStream

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? "> 线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? "> 平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? "> 版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

Server.MapPath() ?? 'ASP 0175 : 80004005'

??????Path ???nt>

/zl/eWebEditor/asp/upload.asp??? 313

? MapPath ??Path ???????'?? "> 请参见

参考

BufferedStream 成员
System.IO 命名空间
FileStream
MemoryStream
Stream

其他资源

文件和流 I/O
如何:从文件读取文本
如何:向文件写入文本

 


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载