阅读背景:

基于Socket编程实现一个简单的Web服务器

来源:互联网 
1.代码
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;namespace WebServer{    /// <summary>    /// 使用Socket实现一个简单的Web服务器    /// 该服务器向请求的浏览器返回一个静态的HTML    ///     /// 这里只是简单实现了一个web服务器的功能,    /// 当然实际的Web服务器通过用户的发来的Http请求中获得请求文件类型,    /// 请求文件名以及请求目录等信息,    /// 然后Web服务器根据这些请求信息从服务器的物理目录中寻找请求的文件,    /// 如果在服务器中找到请求的文件,然后服务器把响应内容发送给客户端。    /// 这里只是通过这个简单的Web服务器让大家理解请求/响应模型以及Web服务器的工作原理,    /// 一些复杂的Web服务器也是在此基础进行一些其他功能的扩展。    /// </summary>    class Program    {        static void Main(string[] args)        {            //获得本机IP地址,即127.0.0.1            IPAddress localaddress = IPAddress.Loopback;            //创建可以访问的端点,49135表示端口号,如果这里设置为0,表示使用一个由系统分配的空闲端口号            IPEndPoint endpoint = new IPEndPoint(localaddress, 49135);            //创建Socket对象,使用IPv4地址,数据通信类型为数据流,传输控制协议为Tcp            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //将Socket绑定到端点上            socket.Bind(endpoint);            //将Socket实例置于侦听状态,设置连接队列长度            socket.Listen(10);            while (true)            {                Console.WriteLine("Wait an connect Request...");                //开始监听,这个方法会阻塞线程的执行,直到接收到一个客户端的连接请求                Socket clientsocket = socket.Accept();                //输出客户端地址                Console.WriteLine("Client Address is:{0}", clientsocket.RemoteEndPoint);                //把客户端的请求数据读入保存到一个数组中                byte[] buffer = new byte[2048];                int receivelength = clientsocket.Receive(buffer, 2048, SocketFlags.None);                string requeststring = Encoding.UTF8.GetString(buffer, 0, receivelength);                //在服务器端输出请求的消息                Console.WriteLine(requeststring);                //服务器端做出相应的内容                //相应的行状态                string statusLine = "HTTP/1.1 200 OK\r\n";                byte[] responseStatusLineBytes = Encoding.UTF8.GetBytes(statusLine);                string responseBody = "<html><head><title>Default Page</title></head><body><h1>Welcome you!</h1></body></html>";                string responseHeader = string.Format("Content-Type:text/html;charset=UTF-8\r\nContent-Length:{0}\r\n", responseBody.Length);                byte[] responseHeaderBytes = Encoding.UTF8.GetBytes(responseHeader);                byte[] responseBodyBytes = Encoding.UTF8.GetBytes(responseBody);                //向客户端发送行状态                clientsocket.Send(responseStatusLineBytes);                //向客户端发送回应头信息                clientsocket.Send(responseHeaderBytes);                //发送头部和内容的空行                clientsocket.Send(new byte[] { 13, 10 });                //向客户端发送主体部分                clientsocket.Send(responseBodyBytes);                //断开连接                clientsocket.Close();                Console.ReadKey();                break;            }            //关闭服务器            socket.Close();        }    }}using System;using System.Collections.Ge



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: