一、Tcplistener搭建web server

1、同socket类似,Tcplistener其实是对socket的封装,方便编程,先初始化tcplistener并且开始监听

 //初始化端点信息
IPAddress address = IPAddress.Loopback;
IPEndPoint endPoint = new IPEndPoint(address, );
//初始化并启动监听器
TcpListener server = new TcpListener(endPoint);
server.Start();
Console.WriteLine("Start listening...\n");

2、然后在一个循环中加上监听到的Tcpclient进行相应处理。在这里,与socket不同,Tcplistener将监听到的请求返回成NetworkStream对象

方便程序员编程,使用流的方式进行读写即可

 while (true)
{
//挂起并接受请求
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Create a connection.");
//获取网络流对象
NetworkStream ns = client.GetStream();
//使用utf8转码
System.Text.Encoding utf8 =System.Text.Encoding.UTF8;
byte[] request = new byte[];
int length = ns.Read(request, , );
string requestString = utf8.GetString(request, , length);
Console.WriteLine(requestString); //初始化状态行
string statusLine = "HTTP/1.1 200 OK\r\n";
byte[] statusLineBytes = utf8.GetBytes(statusLine); //初始化回应的主体
string responseBody = "<html><head><title>From Server</title></head><body><h1>Server Test [TcpListener]</h1></body></html>";
byte[] responseBodyBytes = utf8.GetBytes(responseBody); //初始化回应头
string responseHeader = string.Format("Content-Type:text/html;charset=utf-8\r\nContent-Length:{0}\r\n", responseBody.Length);
byte[] responseHeaderBytes = utf8.GetBytes(responseHeader); //回传信息
ns.Write(statusLineBytes,,statusLineBytes.Length);
ns.Write(responseHeaderBytes, , responseHeaderBytes.Length);
ns.Write(new byte[] { , }, , );
ns.Write(responseBodyBytes, , responseBodyBytes.Length); //关闭TcpClient对象,回收资源
client.Close();
if (Console.KeyAvailable)
break;
}
server.Stop();

3、至此,web server搭建完成

二、基于HttpListener搭建Web Server

1.在.net命名空间System.Net中提供了HttpListener类,该类使用Http.sys系统组件方可工作,故应先检查系统是否支持。初始化HttpListener对象并开始监听

 //查看系统是否支持
if (!HttpListener.IsSupported)
throw new System.InvalidOperationException("Your system must be winXP or Server 2003 or later");
string[] prefixes = new string[] { "http://localhost:23333/" }; //初始化HttpListener
HttpListener listener = new HttpListener();
foreach (string str in prefixes)
listener.Prefixes.Add(str); //开启监听
listener.Start();
Console.WriteLine("Start listening...\n");

2.调用GetContext获取上下文对象,并从该对象解析出request及response。通过request的诸如HttpMethod,AcceptTypes,UserLanguages,UserAgent,Headers等属性获取请求信息。通过设置response相关属性配置回发的相关信息。使用标准流对象将回应回发出去

 while (true)
{
//阻塞线程知道请求到来
HttpListenerContext context = listener.GetContext();
//获取请求信息
HttpListenerRequest request = context.Request;
Console.WriteLine("{0} {1} HTTP/1.1",request.HttpMethod,request.RawUrl);
Console.WriteLine("Accept:{0}", string.Join(",", request.AcceptTypes));
Console.WriteLine("Accept-Encoding:{0}", request.Headers["Accept-Encoding"]); //获取response对象
HttpListenerResponse response = context.Response;
//初始化回应主体
string responseString = @"<html><head><title>From HttpListener Server</title></head><body><h1>Server Test[HttpListener]</h1></html>";
//初始化回应内容、长度、编码
response.ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString);
response.ContentType = "text/html;charset=UTF-8";
//输出回应内容
System.IO.Stream output = response.OutputStream;
System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
writer.Write(responseString);
//关闭输出流
writer.Close();
if (Console.KeyAvailable)
break;
}
listener.Stop();

3.演示完成

跟随上次的socket sever,追加Tcplistener、Httplistener的server的更多相关文章

  1. Socket聊天室-TcpListener,TcpClient

    参考自:http://blog.csdn.net/liguo9860/article/details/6148614 服务端:

  2. 【socket】一分钟理清 socket udpsocket tcpsocket tcplistener TCPClient和 UDPClient

    socket 套接字接口是各种语言tcp udp的网络操作的基础. 直接用socket 对象开发 可以选择 udpsocket  或者 tcpsocket ,两者在使用上仅一些方法和参数不同,所有的底 ...

  3. winform socket编程之TCPListener

    运行结果: 服务端代码 using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  4. Python Socket Sever

    1. Server code 1 # !/usr/bin/env python 2 # coding:utf-8 3 import multiprocessing 4 import socket 5 ...

  5. C Socket Programming for Linux with a Server and Client Example Code

    Typically two processes communicate with each other on a single system through one of the following ...

  6. 【Socket计划】使用C++实现Server结束Client结束

    我是在Visual Stdio 2013两人的建立project.编译如下两个人main文件,然后测试 服务器:Server.cpp #include <WINSOCK2.H> #incl ...

  7. Socket编程实践(4) --多进程并发server

    1.Socket地址复用 int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); in ...

  8. C# socket实践 - 简易版FTP(Server & Client)

    写了个简易版的ftp(服务器和客户端),运行效果如下图: click download下载中的UI: 原理:模仿正规ftp方式,分成2个socket连接:文本命令socket.数据信道socket. ...

  9. socket 建立网络连接,client && server

    client代码: package socket; import java.io.IOException; import java.net.Socket; /** * 客户端_聊天室 * * @aut ...

随机推荐

  1. AP模块发票过账标记为否检查方法

    根据发票编号,查找发票 : 发票过账标记,始终为否,创建会计科目提示如下: 

  2. 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...

  3. 【转】PV3D的小练习~太阳系八大行星

    转自:http://hi.baidu.com/boycy/item/70d1ba53bc8c3a958c12eddf http://www.cnblogs.com/flash3d/archive/20 ...

  4. 性能调优案例分享:Mysql的cpu过高

    性能调优案例分享:Mysql的cpu过高   问题:一个系统,Mysql数据库,数据量变大之后.mysql的cpu占用率很高,一个测试端访问服务器时mysql的cpu占用率为15% ,6个测试端连服务 ...

  5. 变态版大鱼吃小鱼-基于pixi.js 2D游戏引擎

    之前用CSS3画了一条

  6. 课堂博客-----TreeView+++++XML形成博客

    什么是XML? 解析:XML:Extensible Markup Language(可扩展标记语言) HTML:HyperLink Text  Markup Language(超文本标记语言) xml ...

  7. 程序设计 之 C#实现《拼图游戏》

    功能描述: 1.用户自定义上传图片 2.游戏难度选择:简单(3*3).一般(5*5).困难(9*9)三个级别 3.纪录完成步数 模块: 1.拼图类 2.配置类 3.游戏菜单窗口 4.游戏运行窗口 -- ...

  8. Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案

    这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...

  9. Linux配置mysql (centos配置java环境 mysql配置篇 总结四)

    ♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8  1.关于Linux系统 ...

  10. java多线程基本概述(十三)——Executor

    1:Executor接口 public interface Executor 执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等 ...