Простой Web-сервер

Для создания простого Web-сервера необходимо использовать сокеты, реализующие протокол управления передачей (TCP).

Для ознакомления с принципами программирования сокетов можно просмотреть следующий материал.

Чтобы создать простой Web-сервер с помощью C#, создайте новый консольный проект (Console Application) и в файл Program.cs (т.е. в окно кода) введите слеующий программный код.

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

namespace SimpleServer
{
    class SimpleWebServer
    {
        private Socket server;

        public SimpleWebServer(int port)
        {
            server = new Socket(
                AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.IP);
            server.Bind(new IPEndPoint(IPAddress.Loopback, port));
        }
        public void run()
        {
            server.Listen(10);
            Console.WriteLine("Сервер в ожидании запроса...");
            for (; ; )
            {
                Socket socket = server.Accept();
                HandleClientSession(socket);
            }
        }
        private String SocketRead(Socket socket)
        {
            StringBuilder result = new StringBuilder();
            byte[] buffer = new byte[1];

            while (socket.Receive(buffer) > 0)
            {
                char ch = (char)buffer[0];
                if (ch == '\n')
                    break;
                if (ch!='\r')
                    result.Append(ch);
            }
            return result.ToString();
        }
        private void SocketWrite(Socket socket, String str)
        {
            //Если не требуется русско-язычная кодировка
            //System.Text.ASCIIEncoding encoding =
            //    new ASCIIEncoding();

            //Если требуется русско-язычная кодировка
            Encoding encoding = Encoding.GetEncoding(1251);

            socket.Send(encoding.GetBytes(str));
            socket.Send(encoding.GetBytes("\r\n"));
        }
        private void HandleClientSession(Socket socket)
        {
            Console.WriteLine("**New Request**");
            String first = SocketRead(socket);
            Console.WriteLine(first);

            String line;
            do
            {
                line = SocketRead(socket);
                if (line != null)
                    Console.WriteLine(line);
            } while (line != null && line.Length > 0);

            SocketWrite(socket, "HTTP/1.1 200 OK");
            SocketWrite(socket, "");
            SocketWrite(socket, "");
            SocketWrite(socket, "Simple Web Server");
            SocketWrite(socket, "");
            SocketWrite(socket, "<h1>Hello!</h1>");
            SocketWrite(socket, "<h1>Привет!</h1>");
            SocketWrite(socket, "
Hosted by uCoz
"); SocketWrite(socket, ""); socket.Close(); } static void Main(string[] args) { SimpleWebServer webServer = new SimpleWebServer(8081); webServer.run(); } } }

Чтобы запустить Web-сервер, нажмите клавишу F5. Если программа записана без ошибок, появится консольное окно с сообщением "Сервер в ожидании запроса...". Не закрывайте это окно, пока не установите с ним соединение, используя браузер.

Чтобы установить соединение с Web-сервером и проверить его работоспособность, откройте окно браузера и в адресной строке введите следующий адрес localhost:8081. В результате в окне браузера должно появиться следующее сообщение

В окне командной строки, отображающем работу сервера, должна появиться информация следующего вида.

Hosted by uCoz