C#中使用Socket实现简单Web服务器
2014-08-17 16:54
781 查看
上一篇博客中介绍了怎样使用socket访问web服务器。关键有两个:
熟悉Socket编程;
熟悉HTTP协议。
上一篇主要是通过socket来模拟浏览器向(任何)Web服务器发送(HTTP)请求,重点在浏览器端。本篇博客则反过来讲一下怎样使用socket来实现Web服务器,怎样去接收、分析、处理最后回复来自浏览器的HTTP请求。
HTTP协议是浏览器和Web服务器都需要遵守的一种通信规范,如果我们编写一个程序,正确遵守了HTTP协议,那么理论上讲,这个程序可以具备浏览器、甚至Web服务器的功能。
View Code
注意以上代码中的NO.1和NO.2处,socket.BeginAccept()方法放在NO.1处时,服务器端会并行处理请求,而放在NO.2处时,服务器会串行处理请求。读者可以每种方式都试一下,在串行处理请求时,请求处理过程会阻塞后续请求的处理(比如登录耗时10秒钟,其它人无法访问网站)。
以下是demo效果图:
图7:Web服务器运行后,浏览器访问首页:
图7
图8:浏览器中首页显示(包含登录框):
图8
图9:用户点击“登录”按钮,以Post方式提交数据,Web服务器解析、处理,返回新页面:
图9
文章有点长,部分截图还失真了(部分图以前整理的,没有找到大图,所以就凑合看:))
源码下载:http://files.cnblogs.com/xiaozhi_5638/socket_webServer.rar
熟悉Socket编程;
熟悉HTTP协议。
上一篇主要是通过socket来模拟浏览器向(任何)Web服务器发送(HTTP)请求,重点在浏览器端。本篇博客则反过来讲一下怎样使用socket来实现Web服务器,怎样去接收、分析、处理最后回复来自浏览器的HTTP请求。
HTTP协议是浏览器和Web服务器都需要遵守的一种通信规范,如果我们编写一个程序,正确遵守了HTTP协议,那么理论上讲,这个程序可以具备浏览器、甚至Web服务器的功能。
static Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //侦听socket static void Main(string[] args) { _socket.Bind(new IPEndPoint(IPAddress.Any, 8081)); _socket.Listen(100); _socket.BeginAccept(new AsyncCallback(OnAccept), _socket); //开始接收来自浏览器的http请求(其实是socket连接请求) Console.Read(); } static void OnAccept(IAsyncResult ar) { try { Socket socket = ar.AsyncState as Socket; Socket new_client = socket.EndAccept(ar); //接收到来自浏览器的代理socket //NO.1 并行处理http请求 socket.BeginAccept(new AsyncCallback(OnAccept), socket); //开始下一次http请求接收 (此行代码放在NO.2处时,就是串行处理http请求,前一次处理过程会阻塞下一次请求处理) byte[] recv_buffer = new byte[1024 * 640]; int real_recv = new_client.Receive(recv_buffer); //接收浏览器的请求数据 string recv_request = Encoding.UTF8.GetString(recv_buffer, 0, real_recv); Console.WriteLine(recv_request); //将请求显示到界面 Resolve(recv_request,new_client); //解析、路由、处理 //NO.2 串行处理http请求 } catch { } }
View Code
注意以上代码中的NO.1和NO.2处,socket.BeginAccept()方法放在NO.1处时,服务器端会并行处理请求,而放在NO.2处时,服务器会串行处理请求。读者可以每种方式都试一下,在串行处理请求时,请求处理过程会阻塞后续请求的处理(比如登录耗时10秒钟,其它人无法访问网站)。
以下是demo效果图:
图7:Web服务器运行后,浏览器访问首页:
图7
图8:浏览器中首页显示(包含登录框):
图8
图9:用户点击“登录”按钮,以Post方式提交数据,Web服务器解析、处理,返回新页面:
图9
文章有点长,部分截图还失真了(部分图以前整理的,没有找到大图,所以就凑合看:))
源码下载:http://files.cnblogs.com/xiaozhi_5638/socket_webServer.rar
相关文章推荐
- C#中使用Socket实现简单Web服务器
- C#中使用Socket实现简单Web服务器
- 使用C# socket 简单构架一个web服务器
- C# | socket实现简单的web服务器
- 通过Socket实现简单web服务器功能(接收页面请求信息)不使用Tomcat!
- C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)
- 使用Python或Node创建简单web服务器和FTP服务器实现文件共享
- 网络编程:使用Socket实现简单的服务器和客户端的通信
- C#实现简单WEB服务器
- 使用HttpListener实现简单Web服务器
- 通过一个Socket例子理解Http协议(实战Java Web服务器--使用HTTP协议和JAVA类实现)
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- TCP/IP协议学习(七) 基于C# Socket的Web服务器---动态通讯实现
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 【Web后端笔记】基于Socket实现的简单Web服务器搭建
- 使用socket实现简单的客户端和服务端通信(C#语言)
- C#实现简单WEB服务器
- C#中使用Socket请求Web服务器过程
- 使用Socket的简单Web服务器
- Windows窗体应用程序(非Console)使用libuv实现简单的异步WEB服务器