Csharp/CSharp Tutorial/Network/TcpListener

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Asynch Network Server

<source lang="csharp">using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text;

       class ClientHandler
       {
           private byte[] buffer = new byte[256];
           private Socket socket;
           private NetworkStream networkStream;
           private AsyncCallback callbackRead;
           private AsyncCallback callbackWrite;
           public ClientHandler(Socket socketForClient)
           {
               socket = socketForClient;
               networkStream = new NetworkStream(socketForClient);
               callbackRead = new AsyncCallback(this.OnReadComplete);
               callbackWrite = new AsyncCallback(this.OnWriteComplete);
           }
           public void StartRead()
           {
               networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
           }
           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(s);
                   networkStream.BeginWrite(buffer, 0, bytesRead, callbackWrite, null);
               }
               else
               {
                   networkStream.Close();
                   socket.Close();
                   networkStream = null;
                   socket = null;
               }
           }
           private void OnWriteComplete(IAsyncResult ar)
           {
               networkStream.EndWrite(ar);
               networkStream.BeginRead(buffer, 0, buffer.Length,callbackRead, null);
           }
       }
   public class AsynchNetworkServer
   {
       public static void Main()
       {
           IPAddress localAddr = IPAddress.Parse("127.0.0.1");
           TcpListener tcpListener = new TcpListener(localAddr, 65000);
           tcpListener.Start();
           for (; ; )
           {
               Socket socketForClient = tcpListener.AcceptSocket();
               ClientHandler handler =new ClientHandler(socketForClient);
               handler.StartRead();
           }
       }
   }</source>

Create a Socket server from TcpListener

<source lang="csharp">using System; using System.IO; using System.Net.Sockets ; class MainClass {

 public static void Main() 
 {
   TcpListener tcpl = new TcpListener(9999);
   tcpl.Start();
   for (;;)
   {
     Socket newSocket = tcpl.AcceptSocket();
     if (newSocket.Connected)
     {
       NetworkStream ns = new NetworkStream(newSocket);
       byte[] buf = {1,2,3,4,5,6,7,8,9};
       ns.Write(buf, 0, 9);
       ns.Flush();
       ns.Close();
     }
     newSocket.Close();
     break;
   }
 }

}</source>

Create BinaryWriter and BinaryReader from TcpListener

<source lang="csharp">using System; using System.IO; using System.Net; using System.Net.Sockets; class MainClass {

   public static void Main() 
   {
       TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8000);
       Console.WriteLine("About to initialize port.");
       listener.Start();
       Console.WriteLine("Listening for a connection...");
           
       try 
       {
           using (TcpClient client = listener.AcceptTcpClient())
           {
               Console.WriteLine("Connection accepted.");
               NetworkStream stream = client.GetStream();
               using (BinaryWriter w = new BinaryWriter(stream))
               {
               }
               using (BinaryReader r = new BinaryReader(stream))
               {
               }
           }
       } 
       catch (Exception ex) 
       {
           Console.WriteLine(ex.ToString());
       }
       finally
       {
           listener.Stop();
           Console.WriteLine("Listener stopped.");
       }
  }

}</source>

Listening for sockets

<source lang="csharp">using System; using System.Net; using System.Text; using System.Net.Sockets; class MainClass {

 [STAThread]
 static void Main(string[] args)
 {
   int PortNumber = 10000;
   TcpListener MyListener = new TcpListener(IPAddress.Parse("127.0.0.1"), PortNumber);
   MyListener.Start();
   Console.WriteLine("Waiting For Connection");
   TcpClient MyClient = MyListener.AcceptTcpClient();
   Console.WriteLine("Connection Accepted");
   NetworkStream MyNetStream = MyClient.GetStream();
   String Response = "accepted";
   Byte[] SendTheseBytes = Encoding.ASCII.GetBytes(Response);
   MyNetStream.Write(SendTheseBytes, 0, SendTheseBytes.Length);
   MyClient.Close();
   MyListener.Stop();
 }

}</source>

TcpListener Sample

<source lang="csharp">using System; using System.Net; using System.Net.Sockets; using System.Text; class MainClass {

  public static void Main()
  {
     int receivedDataLength;
     byte[] data = new byte[1024];
     TcpListener socket = new TcpListener(9999);
     socket.Start();
     TcpClient client = socket.AcceptTcpClient();
     NetworkStream ns = client.GetStream();
     string welcome = "Welcome";
     data = Encoding.ASCII.GetBytes(welcome);
     ns.Write(data, 0, data.Length);
     while(true)
     {
        data = new byte[1024];
        receivedDataLength = ns.Read(data, 0, data.Length);
        Console.WriteLine(Encoding.ASCII.GetString(data, 0, receivedDataLength));
        ns.Write(data, 0, receivedDataLength);
     }
     ns.Close();
     client.Close();
     socket.Stop();
  }

}</source>

Time Server

<source lang="csharp">using System.Net.Sockets; using System.IO; using System; using System.Threading; public class TimeServer {

   public static void Main() {
       TcpListener server = new TcpListener(55555);
       server.Start();
       Console.WriteLine("Waiting for connections");
       while (true) {
           Socket client = server.AcceptSocket();
           Console.WriteLine("New connection detected on " + client.Handle);
           ClientHandler ch = new ClientHandler(client);
       }
   }

} class ClientHandler {

   private Socket client;
   public ClientHandler(Socket client) {
       this.client = client;
       Thread clientThread = new Thread(new ThreadStart(ClientSession));
       clientThread.Start();
   }
   public void ClientSession() {
       NetworkStream netStream = new NetworkStream(client);
       BinaryWriter timeOut = new BinaryWriter(netStream);
       String time = DateTime.Now.ToString();
       timeOut.Write(time);
       timeOut.Close();
       netStream.Close();
       client.Close();
   }

}</source>

Use NetworkStream to write to a client

<source lang="csharp">using System; using System.IO; using System.Net.Sockets ; class MainClass {

 public static void Main() 
 {
   TcpListener tcpl = new TcpListener(9999);
   tcpl.Start();
   for (;;)
   {
     Socket newSocket = tcpl.AcceptSocket();
     if (newSocket.Connected)
     {
       NetworkStream ns = new NetworkStream(newSocket);
       byte[] buf = {1,2,3,4,5,6,7,8,9};
       ns.Write(buf, 0, 9);
       ns.Flush();
       ns.Close();
     }
     newSocket.Close();
     break;
   }
 }

}</source>

Use TcpListener to create a Tcp server

<source lang="csharp">using System; using System.IO; using System.Net; using System.Net.Sockets; class MainClass {

   public static void Main() 
   {
       TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8000);
       Console.WriteLine("About to initialize port.");
       listener.Start();
       Console.WriteLine("Listening for a connection...");
           
       try 
       {
           using (TcpClient client = listener.AcceptTcpClient())
           {
               Console.WriteLine("Connection accepted.");
               NetworkStream stream = client.GetStream();
               using (BinaryWriter w = new BinaryWriter(stream))
               {
               }
               using (BinaryReader r = new BinaryReader(stream))
               {
               }
           }
       } 
       catch (Exception ex) 
       {
           Console.WriteLine(ex.ToString());
       }
       finally
       {
           listener.Stop();
           Console.WriteLine("Listener stopped.");
       }
  }

}</source>