博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于TcpListener的web服务器
阅读量:6155 次
发布时间:2019-06-21

本文共 2965 字,大约阅读时间需要 9 分钟。

写在前面

上篇文章根据《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 = "这是一个web服务器的测试

Hello World.

"; 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://rvifa.baihongyu.com/

你可能感兴趣的文章
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>