Для создания простого 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, "
");
SocketWrite(socket, "");
socket.Close();
}
static void Main(string[] args)
{
SimpleWebServer webServer =
new SimpleWebServer(8081);
webServer.run();
}
}
}
Чтобы запустить Web-сервер, нажмите клавишу F5. Если программа записана без ошибок, появится консольное окно с сообщением "Сервер в ожидании запроса...". Не закрывайте это окно, пока не установите с ним соединение, используя браузер.
Чтобы установить соединение с Web-сервером и проверить его работоспособность, откройте окно браузера и в адресной строке введите следующий адрес localhost:8081. В результате в окне браузера должно появиться следующее сообщение
В окне командной строки, отображающем работу сервера, должна появиться информация следующего вида.