Csharp/C Sharp/Network/NetworkStream

Материал из .Net Framework эксперт
Версия от 14:46, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Acts as a client program to demonstrate the use of the NetworkStream class

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// NStrCli.cs -- Acts as a client program to demonstrate the use of // the NetworkStream class. // // Compile this program with the following command line. // C:>csc NStrCli.cs // // To use this program with the companion server program, first start // the server, then connect to it using the client program (this program) // in a separate console window. // As you enter lines from the client, they will appear in the server // console window. To end the session, press <Enter> on a blank line. // using System; using System.IO; using System.Net; using System.Net.Sockets; namespace nsStreams {

   public class NStrCli
   {
       static public void Main ()
       {
           IPAddress hostadd = Dns.Resolve("localhost").AddressList[0];
           Console.WriteLine ("Host is " + hostadd.ToString());
           IPEndPoint EPhost = new IPEndPoint(hostadd, 2048);
           Socket s = new Socket(AddressFamily.InterNetwork,
                                 SocketType.Stream,
                                 ProtocolType.Tcp );
           string str = "Hello, World!";
           byte [] b;
           StringToByte (out b, str);
           s.Connect (EPhost);
           NetworkStream strm = new NetworkStream (s, FileAccess.ReadWrite);
           if (!s.Connected)
           {
               Console.WriteLine ("Unable to connect to host");
               return;
           }
           strm.Write (b, 0, b.Length);
           while (b[0] != 4)
           {
               string text = Console.ReadLine();
               if (text.Length == 0)
               {
                   b[0] = 4;
                   strm.Write (b, 0, 1);
                   break;
               }
               StringToByte (out b, text);
               strm.Write (b, 0, text.Length);
           }
           strm.Close ();
           s.Close ();
       }

// // Convert a buffer of type byte to a string

       static string ByteToString (byte [] b, int start)
       {
           string str = "";
           for (int x = start; x < b.Length; ++x)
           {
               str += (char) b [x];
           }
           return (str);
       }

// // Convert a buffer of type string to byte

       static void StringToByte (out byte [] b, string str)
       {
           b = new byte [str.Length];
           for (int x = 0; x < str.Length; ++x)
           {
               b[x] = (byte) str [x];
           }
       }
  }

}

      </source>


Acts as a server program to demonstrate the use of the NetworkStream class

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// NStrSvr.cs -- Acts as a server program to demonstrate the use of // the NetworkStream class. // // Compile this program with the following command line. // C:>csc NStrSvr.cs // // To use this program with the companion client program, first start // the server (this program), then connect to it using the client program // in a separate console window. // As you enter lines from the client, they will appear in the server // console window. To end the session, press <Enter> on a blank line. // using System; using System.IO; using System.Net; using System.Net.Sockets; namespace nsStreams {

   public class NStrSvr
   {
       static public void Main ()
       {
           IPAddress hostadd = Dns.Resolve("localhost").AddressList[0];
           Console.WriteLine ("Host is " + hostadd.ToString());
           IPEndPoint EPhost = new IPEndPoint(hostadd, 2048);
           Socket s = new Socket(AddressFamily.InterNetwork,
                                 SocketType.Stream,
                                 ProtocolType.Tcp );
           s.Bind (EPhost);
           s.Listen (0);
           Socket sock = s.Accept();
           NetworkStream strm = new NetworkStream (sock, FileAccess.ReadWrite);
           byte [] b = new byte [256];
           while (true)
           {
               for (int x = 0; x < b.Length; ++x)
                   b[x] = 0;
               strm.Read (b, 0, b.Length);
               if (b[0] == 4)
                   break;
               string str = ByteToString (b, 0);
               Console.WriteLine (str);
           }
           strm.Close ();
           sock.Close ();
           s.Close ();
       }
       // Convert a buffer of type byte to a string
       static string ByteToString (byte [] b, int start)
       {
           string str = "";
           for (int x = start; x < b.Length; ++x)
           {
               if (b[x] == 0)
                   break;
               str += (char) b [x];
           }
           return (str);
       }
   }

}


      </source>


implements a NetworkStream client 2

<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110

  • /
/*
 Example15_12b.cs implements a NetworkStream client
  • /

using System; using System.IO; using System.Net.Sockets ; public class Example15_12b {

 public static void Main() 
 {
   // create a client socket
   TcpClient newSocket = new TcpClient("localhost", 50001);
   // create a NetworkStream to read from the host
   NetworkStream ns = newSocket.GetStream();
   // fill a byte array from the stream
   byte[] buf = new byte[100];
   ns.Read(buf, 0, 100);
   // convert to a char array and print
   char[] buf2 = new char[100];
   for(int i=0;i<100;i++)
     buf2[i]=(char)buf[i];
   Console.WriteLine(buf2);
   // clean up
   ns.Close();
   newSocket.Close();
 }

}


      </source>


implements a NetworkStream server

<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110

  • /
/*
 Example15_12a.cs implements a NetworkStream server
  • /

using System; using System.IO; using System.Net.Sockets ; public class Example15_12a {

 // Listen waits for connections
 private void Listen()
 {
   // listen on port 50001
   TcpListener tcpl = new TcpListener(50001);
   tcpl.Start();
   // wait for clients
   for (;;)
   {
     
     // Block here waiting for client connections
     Socket newSocket = tcpl.AcceptSocket();
     if (newSocket.Connected)
     {
       // create a NetworkStream on the socket
       NetworkStream ns = new NetworkStream(newSocket);
       // send some data
       byte[] buf = {(byte)"H", (byte)"e", (byte)"l", (byte)"l",
        (byte)"o", (byte)" ", (byte)"N", (byte)"e", (byte)"t"};
       ns.Write(buf, 0, 9);
       // cleanup
       ns.Flush();
       ns.Close();
     }
     // clean up and quit
     newSocket.Close();
     break;
   }
 }
 public static void Main() 
 {
   // launch a listening thread
   Example15_12a listener = new Example15_12a();
   listener.Listen();
 }

}


      </source>


Write to a NetworkStream

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

class Program {

   static void Main(string[] args) {
       TcpClient client = new TcpClient();
       IPHostEntry host = Dns.GetHostByName("www.google.ru");
       client.Connect(host.AddressList[0], 8000);
       NetworkStream clientStream = client.GetStream();
       string request = "LIST";
       byte[] requestBuffer = Encoding.ASCII.GetBytes(request);
       clientStream.Write(requestBuffer, 0, requestBuffer.Length);
       byte[] responseBuffer = new byte[256];
       MemoryStream memStream = new MemoryStream();
       int bytesRead = 0;
       do {
           bytesRead = clientStream.Read(responseBuffer, 0, 256);
           memStream.Write(responseBuffer, 0, bytesRead);
       } while (bytesRead > 0);
   }

}

</source>