基于TcpListener的web服务器

简介:

写在前面

上篇文章根据《asp.net 本质论》书上提供的例子,实现了一个简单的web服务器,本篇文章将介绍另一种实现方式——基于TcpListener的web服务器。

TcpListener

命名空间System.Net.Sockets下的TcpListener类简化了基于tcp协议的监听程序。

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace TcpListenerWebServer
{
    class Program
    {
        static void Main(string[] args)
        {
            //取得本机的loopback网络地址,即127.0.0.1
            IPAddress ip = IPAddress.Loopback;
            //创建可以访问的网络端点,8888表示端口号
            IPEndPoint endpoint = new IPEndPoint(ip, 8888);
            //初始化tcp监听器
            /*
             * 传入监听的端点参数,通过构造函数初始化监听器,
             * 不再关注如何设置网络协议等细节,
             * 具体可以和上篇文章的方式进行对比。
             */
            TcpListener listener = new TcpListener(endpoint);
            //开启监听器
            listener.Start();
            //打印提示
            Console.WriteLine("监听开始......");
            while (true)
            {
                //AcceptTcpClient方法将阻塞进程,直到一个客户端的连接到达监听器,返回一个TcpClient类型的对象。可通过该对象与客户端进行通信
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine("与客户端已经建立连接.....");
                //得到一个网络流,通过TcpClient可以得到一个用于输入和输出的网络流对象NetworkStream,对Socket的输入和输出进行了封装。
                NetworkStream ns = client.GetStream();
                //处理过程使用utf8 进行编码
                System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
                //设置用于接收的字节数组
                byte[] buffer = new byte[4096];
                int length = ns.Read(buffer, 0, buffer.Length);
                //得到请求内容
                string requestString = utf8.GetString(buffer, 0, length);
                //打印
                Console.WriteLine(requestString);
                //回应的状态行
                string statusLine = "HTTP/1.1 200 OK\r\n";
                byte[] statusLineBuffer = utf8.GetBytes(statusLine);
                //准备发送到客户端的网页
                string responseBody = "<html><head><title>这是一个web服务器的测试</title></head><body><h1>Hello World.</h1></body></html>";
                byte[] responseBodyBuffer = utf8.GetBytes(responseBody);
                //回应的头部
                string responseHeader = string.Format(
                    "Content-Type:text/html;charset=UTF-8\r\nContent-Length: {0}\r\n", responseBodyBuffer.Length);
                byte[] responseHeaderBuffer = utf8.GetBytes(responseHeader);
                //响应状态行
                ns.Write(statusLineBuffer, 0, statusLineBuffer.Length);
                //响应头部
                ns.Write(responseHeaderBuffer, 0, responseHeaderBuffer.Length);
                //输出头部与内容之间的空行
                ns.Write(new byte[] { 13, 10 }, 0, 2);
                //输出内容部分
                ns.Write(responseBodyBuffer, 0, responseBodyBuffer.Length);
                //关闭与客户端的连接
                client.Close();
                break;
            }
            //关闭服务器监听
            listener.Stop();
            Console.Read();
        }
    }
}
复制代码

启动服务器,并在浏览器中输入http://localhost:8888/

总结

TcpListener类,简化了对tcp协议的监听,通过TcpClient可以得到网络流,然后就可以对网络的输入和输出进行操作了,用起来更方便。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5189552.html

相关文章
|
15小时前
【计网·湖科大·思科】实验一 熟悉仿真软件及访问WEB服务器
【计网·湖科大·思科】实验一 熟悉仿真软件及访问WEB服务器
6 0
|
15小时前
|
存储 安全 数据安全/隐私保护
Web应用程序的会话管理是一种跟踪和识别特定用户与Web服务器之间交互的技术
【5月更文挑战第12天】Python Web开发中,会话管理用于跟踪用户与服务器交互,如Flask框架提供的内置功能。以下是一个简单示例:安装Flask后,设置应用密钥,通过session读写用户状态。例如,创建一个显示和设置用户名称的Web应用,用户提交的名字将保存在会话中。在生产环境中,应安全存储密钥,如使用环境变量。扩展会话管理可借助第三方库实现更多功能,但可能需更多配置。
16 2
|
16小时前
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。
|
15小时前
|
中间件 Go API
Golang深入浅出之-Go语言标准库net/http:构建Web服务器
【4月更文挑战第25天】Go语言的`net/http`包是构建高性能Web服务器的核心,提供创建服务器和发起请求的功能。本文讨论了使用中的常见问题和解决方案,包括:使用第三方路由库改进路由设计、引入中间件处理通用逻辑、设置合适的超时和连接管理以防止资源泄露。通过基础服务器和中间件的代码示例,展示了如何有效运用`net/http`包。掌握这些最佳实践,有助于开发出高效、易维护的Web服务。
28 1
|
15小时前
|
机器学习/深度学习 数据挖掘 Python
使用Python实现简单的Web服务器
使用Python内置的http.server模块,本文演示了创建基本Web服务器的步骤。通过编写简单的代码,实现响应GET请求并返回“Hello, World!”。此外,还展示了如何扩展服务器功能,处理不同URL路径,如根路径和/about路径,并实现404错误页面。这个基础教程为理解HTTP服务器原理和Python网络编程入门提供了帮助。对于复杂Web应用,建议使用Flask或Django等高级框架。
|
15小时前
|
负载均衡 监控 Unix
[AIGC] Nginx:一个高性能的 Web 服务器和反向代理
[AIGC] Nginx:一个高性能的 Web 服务器和反向代理
|
15小时前
|
Apache
web服务器(Apache)访问日志(access_log)详细解释
web服务器(Apache)访问日志(access_log)详细解释
|
16小时前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
32 0
|
15小时前
|
弹性计算
阿里云ECS的使用心得
本文主要讲述了我是如何了解到ECS,使用ECS的一些经验,以及自己的感悟心得
|
15小时前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。

热门文章

最新文章