⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex-21-10

📁 Programming Csharp Source Code(代码) Programming Csharp Source Code
💻
字号:
// Example 21-10: Implementing an asynchronous network streaming server

using System;
using System.Net.Sockets;


public class AsynchNetworkServer
{
  
   class ClientHandler
   {
      public ClientHandler( Socket socketForClient )
      {
         socket = socketForClient;
         buffer = new byte[256];
         networkStream = 
            new NetworkStream(socketForClient);

         callbackRead =
            new AsyncCallback(this.OnReadComplete);

         callbackWrite =
            new AsyncCallback(this.OnWriteComplete);
      }

      // begin reading the string from the client
      public void StartRead()
      {
         networkStream.BeginRead(
            buffer, 0, buffer.Length, 
            callbackRead, null);
      }

      // when called back by the read, display the string
      // and echo it back to the client
      private void OnReadComplete( IAsyncResult ar )
      {
         int bytesRead = networkStream.EndRead(ar);

         if( bytesRead > 0 )
         {
            string s = 
               System.Text.Encoding.ASCII.GetString(
                  buffer, 0, bytesRead);
            Console.Write( 
                  "Received {0} bytes from client: {1}", 
                   bytesRead, s );
            networkStream.BeginWrite(
               buffer, 0, bytesRead, callbackWrite, null);
         }
         else
         {
            Console.WriteLine( "Read connection dropped");
            networkStream.Close();
            socket.Close();
            networkStream = null;
            socket = null;
         }
      }

      // after writing the string, print a message and resume reading
      private void OnWriteComplete( IAsyncResult ar )
      {
         networkStream.EndWrite(ar);
         Console.WriteLine( "Write complete");
         networkStream.BeginRead(
            buffer, 0, buffer.Length, 
            callbackRead, null);
      }

      private byte[]          buffer;
      private Socket          socket;
      private NetworkStream   networkStream;
      private AsyncCallback   callbackRead;
      private AsyncCallback   callbackWrite;
   }


   public static void Main()
   {
      AsynchNetworkServer app = 
         new AsynchNetworkServer();
      app.Run();
   }

   private void Run()
   {
      // create a new TcpListener and start it up
      // listening on port 65000
      TcpListener tcpListener = new TcpListener(65000);
      tcpListener.Start();       

      // keep listening until you send the file
      for (;;)
      {
         // if a client connects, accept the connection
         // and return a new socket named socketForClient
         // while tcpListener keeps listening
         Socket socketForClient = 
            tcpListener.AcceptSocket();
         if (socketForClient.Connected)
         {
            Console.WriteLine("Client connected");
            ClientHandler handler = 
               new ClientHandler(socketForClient);
            handler.StartRead();
        }
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -