关于Socket的学习代码

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;

public class Sample
{
    public static string DoSocketGet(string server)
    {
        //Set up variables and String to write to the server.
        Encoding ASCII = Encoding.ASCII;
        string Get = "GET / HTTP/1.1\r\nHost: " + server +
                     "\r\nConnection: Close\r\n\r\n";
        Byte[] ByteGet = ASCII.GetBytes(Get);
        Byte[] RecvBytes = new Byte[256];
        String strRetPage = null;

        // IPAddress and IPEndPoint represent the endpoint that will
        //   receive the request.
        // Get first IPAddress in list return by DNS.

        try
        {
            // Define those variables to be evaluated in the next for loop and 
            // then used to connect to the server. These variables are defined
            // outside the for loop to make them accessible there after.
            Socket s = null;
            IPEndPoint hostEndPoint;
            IPAddress hostAddress = null;
            int conPort = 80;

            // Get DNS host information.
            IPHostEntry hostInfo = Dns.Resolve(server);
            // Get the DNS IP addresses associated with the host.
            IPAddress[] IPaddresses = hostInfo.AddressList;

            // Evaluate the socket and receiving host IPAddress and IPEndPoint. 
            for (int index = 0; index < IPaddresses.Length; index++)
            {
                hostAddress = IPaddresses[index];
                hostEndPoint = new IPEndPoint(hostAddress, conPort);

                // Creates the Socket to send data over a TCP connection.
                s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                // Connect to the host using its IPEndPoint.
                s.Connect(hostEndPoint);

                if (!s.Connected)
                {
                    // Connection failed, try next IPaddress.
                    strRetPage = "Unable to connect to host";
                    s = null;
                    continue;
                }

                // Sent the GET request to the host.
                s.Send(ByteGet, ByteGet.Length, 0);

            } // End of the for loop.      

            // Receive the host home page content and loop until all the data is received.
            Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
            strRetPage = "Default HTML page on " + server + ":\r\n";
            strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);

            while (bytes > 0)
            {
                bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
                strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
            }
        } // End of the try block.

        catch (SocketException e)
        {
            Console.WriteLine("SocketException caught!!!");
            Console.WriteLine("Source : " + e.Source);
            Console.WriteLine("Message : " + e.Message);
        }
        catch (ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException caught!!!");
            Console.WriteLine("Source : " + e.Source);
            Console.WriteLine("Message : " + e.Message);
        }
        catch (NullReferenceException e)
        {
            Console.WriteLine("NullReferenceException caught!!!");
            Console.WriteLine("Source : " + e.Source);
            Console.WriteLine("Message : " + e.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception caught!!!");
            Console.WriteLine("Source : " + e.Source);
            Console.WriteLine("Message : " + e.Message);
        }

        return strRetPage;
    }
    public static void Main()
    {
        Console.WriteLine("请需入请求地址:");
        String server = Console.ReadLine();
        Console.WriteLine(DoSocketGet(server));

        //存一下档
        string path = @"D:\Socket.html";
        if (File.Exists(path))
        {
            File.Delete(path);
        }
        using (FileStream fs = File.Create(path))
        {
            Byte[] bs = new UTF8Encoding(true).GetBytes(DoSocketGet(server));
            fs.Write(bs, 0, bs.Length);
        }
    }
}
Contributors: FHL