一、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. ng自带的表单验证

    几点注意:使用ng的表单验证,需要给form,input,textarea一个name 要求:验证输入框的内容(长度,正则,必填,),当验证不通过的时候,就禁用提交按钮 使用的验证:ng-maxlen ...

  2. Shell 学习笔记之变量

    变量 知识点 变量赋值和输出 variable="hello world" echo $variable 或者 echo ${variable} (最后格式统一使用后者) 只读变量 ...

  3. php调试之路

    解析php中die(),exit(),return的区别 die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续 ...

  4. windows下安装zabbix_agent

    Server端在linux系统上,server端版本为2.2.6,是以前就装好的已经跑了很久的稳定版.目前的需求是要将新业务的服务器添加到该监控队列.而这些服务器是windows系统. 第一次下载了最 ...

  5. Java开发—乘风破浪

    最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.手头的基本完成了,因此打算好好来熟悉下java的相关工具库,需要借助你们,好好的在JAV ...

  6. Centos/RHEL上查看主板型号

    老是搞忘记,专门做个记录: [root@media ~]# dmidecode | grep "Product Name" Product Name: To be filled b ...

  7. ECP系统J2EE架构开发平台

    一 体系结构 ECP平台是一个基于J2EE架构设计的大型分布式企业协同管理平台,通过采用成熟的J2EE的多层企业架构体系,充分保证了系统的健壮性.开放性和扩展性.可选择部署于多种系统环境,满足不同类型 ...

  8. spring之bean

    Bean的基本配置 id属性 id属性确定bean的唯一标识符,容器对bean的管理,访问,以及该bean的依赖关系,都通过该属性来完成.bean的id属性在Spring容器中应该是唯一的. clas ...

  9. zepto.js介绍

    是一个阉割版的jQuery zepto不支持jQuery过于复杂的选择器,比如:first :last :eq zepto如果要用动画必须再次引包 zepto能将css3中transition支持的动 ...

  10. ADO.NET 参数化查询

    参数化查询 使用参数化查询的情景有很多,但最常用的情景是需要用户在查询中进行输入的情况. 有两种方法可供使用.第一,可以讲用户输入嵌入到查询字符串中,例如可能使用.NET Framework中的Str ...