实现自定义的Web服务器

源码下载: http://download.csdn.net/detail/kingmax54212008/9910988

实现自定义的Web服务器

简介该示例实现一个自定义的Web服务器,该服务监听浏览器发出的Http请求,该服务器只对49155端口进行监听,当在浏览器输入http://localhost:41955/,此时服务器会响应该请求,并向输出Welcome you字符串作为响应;并且在服务器的界面中我们可以看到Http请求的详细信息

简介

为了简化网络编程,.net对套接字又进行了一次封装,封装后的类是在System.Net.Sockets命名空间下的TcpListener类和TcpClient类,使用TcpListener类用来监听和接收传入的连接请求,在该类的构造函数中只需要传递一组网络端点信息就可以准备好监听参数,而不需要设置使用的网络协议等细节,调用Start方法后,监听工作就开始(间接调用了Socket.Listen方法),AcceptTcpClient方法将阻塞进程,直到一个客户端发来连接请求为止,这个方法返回一个封装了Socket的TcpClient对象,同时从传入的连接队列中删除该客户端的连接请求。此时通过这个TcpClient对象与客户端进行通信。

该示例实现一个自定义的Web服务器,该服务监听浏览器发出的Http请求,该服务器只对49155端口进行监听,当在浏览器输入http://localhost:41955/,此时服务器会响应该请求,并向输出Welcome you字符串作为响应;并且在服务器的界面中我们可以看到Http请求的详细信息。

运行示例

第一步、打开“WebServer.sln”文件来打开整个解决方案,然后按F5或按Ctrl+F5来运行该示例,此时你将看到下面的界面:

第二步、在打开IE浏览器,在地址栏输入http://localhost:49155/,此时可以在浏览器中看到下面的结果。

第三步、然后我们回到Web服务器程序中,我们将看到下面的输出信息

使用代码

第一步、用Visual Studio创建一个控制台应用程序。

第二步、在控制台应用程序中加入额外的命名空间

 

C#
using System.Net; 
using System.Net.Sockets;
 第三步、创建TCP监听器来对客户端的请求进行监听并对请求进行响应。
C#
// 获得本机的Ip地址,即127.0.0.1 
            IPAddress localaddress = IPAddress.Loopback; 
 
            // 创建可以访问的断点,49155表示端口号,如果这里设置为0,表示使用一个由系统分配的空闲的端口号 
            IPEndPoint endpoint = new IPEndPoint(localaddress, 49155); 
 
            // 创建Tcp 监听器 
            TcpListener tcpListener = new TcpListener(endpoint); 
 
            // 启动监听 
            tcpListener.Start(); 
            Console.WriteLine("Wait an connect Request..."); 
            while (true) 
            { 
                // 等待客户连接 
                TcpClient client = tcpListener.AcceptTcpClient(); 
                if (client.Connected == true) 
                { 
                    // 输出已经建立连接 
                    Console.WriteLine("Created connection"); 
                } 
 
                // 获得一个网络流对象 
                // 该网络流对象封装了Socket的输入和输出操作 
                // 此时通过对网络流对象进行写入来返回响应消息 
                // 通过对网络流对象进行读取来获得请求消息 
                NetworkStream netstream = client.GetStream(); 
                // 把客户端的请求数据读入保存到一个数组中 
                byte[] buffer = new byte[2048]; 
 
                int receivelength = netstream.Read(buffer, 02048); 
                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><p style='font:bold;font-size:24pt'>Welcome you</p></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); 
 
                // 写入状态行信息 
                netstream.Write(responseStatusLineBytes, 0, responseStatusLineBytes.Length); 
                // 写入回应的头部 
                netstream.Write(responseHeaderBytes, 0, responseHeaderBytes.Length); 
                // 写入回应头部和内容之间的空行 
                netstream.Write(new byte[] { 1310 }, 02); 
 
                // 写入回应的内容 
                netstream.Write(responseBodyBytes, 0, responseBodyBytes.Length); 
 
                // 关闭与客户端的连接 
                client.Close(); 
                Console.ReadKey(); 
                break; 
            } 
 
            // 关闭服务器 
            tcpListener.Stop();

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值