摘自《Asp.Net 本质论》作者:郝冠军

//在.Net中。system.Net命名空间提供了网络编程的大多数数据据类型以及常用操作,其中常用的类型如下:
/*
IPAddress 类表示一个IP地址
* IPEndPoint类用来表示一个IP地址和一个端口号的组合,成为网络的端点。
* System.Net.Sockets命名空间中提供了基于Socked编程的数据类型。
* Socket类封装了Socked的操作。
* 常见的操作:
* Listen:设置基于连接通信的Socket进入监听状态,并设置等待队列的长度。
* Accept:等待一个新的连接,当新的连接到达的时候,返回一个针对新连接的Socket对象。通过这个新的Socket对象,可以与新连接通信。
* Receive:通过Socked接受字节数据,保存到一个字节数组中,返回实际接受的字节数。
* Send:通过Socked发送预先保存在字节数组中的数据。
*/

 class Socket_Study
{
public void CreateSocket()
{
//获得本机的loopback网络地址,即127.0.0.1
IPAddress address = IPAddress.Loopback;
//创建可以访问的端点,8974 为0表示一个空闲的端口号
IPEndPoint endpoint = new IPEndPoint(address, );
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(endpoint);
socket.Listen();
Console.WriteLine("开始监听,端口号:{0}",endpoint.Port);
while (true)
{
//开始监听,这个方法会阻塞线程的执行,知道接收到一个客户端的连接请求
Socket client = socket.Accept();
Console.WriteLine(client.RemoteEndPoint);
//准被读取客户端请求的数据,读取的数据放在一个数组中
byte[] buffer = new byte[]; int lentth = client.Receive(buffer, , SocketFlags.None); string requeststring = Encoding.UTF8.GetString(buffer, , lentth); Console.WriteLine(requeststring);
//回应状态行
string statusLine = "Http/1.1 200 ok \r\n";
byte[] statusLineBytes = Encoding.UTF8.GetBytes(statusLine);
//准备发送到客户端的网页
string responseBody = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head runat=\"server\"> <title>Socket Study </title></head><body><form id=\"form1\" runat=\"server\"><div>Hello World ,Socket Study </div> </form></body></html>";
byte[] responseBytes = Encoding.UTF8.GetBytes(responseBody);
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);
//向客户端发送状态信息
client.Send(statusLineBytes);
//发送回应头
client.Send(responseHeaderBytes);
client.Send(new byte[]{,});
//发送内容
client.Send(responseBytes);
client.Close();
if (Console.KeyAvailable)
{
break;
}
socket.Close();
}
}
}

  运行之后打开浏览器 输入地址:http://localhost:8974/

即可看到结果。

Socket 初识 用Socket建立一个简易Web服务器的更多相关文章

  1. 写一个简易web服务器、ASP.NET核心知识(4)--转载

    第一次尝试(V1.0) 1.理论支持 这里主要要说的关于Socket方面的.主要是一个例子,关于Socket如何建立服务端程序的简单的代码. static void Main(string[] arg ...

  2. 写一个简易web服务器、ASP.NET核心知识(4)

    前言 昨天尝试了,基于对http协议的探究,我们用控制台写了一个简单的浏览器.尽管浏览器很low,但是对于http协议有个更好的理解. 说了上面这一段,诸位猜到我要干嘛了吗?(其实不用猜哈,标题里都有 ...

  3. 自己实现一个简易web服务器

    一个web服务器是网络应用中最基础的环节. 构建需要理解三个内容: 1.http协议 2.socket类 3.服务端实现原理 1.1 HTTP http请求 一般一个http请求包括以下三个部分: 1 ...

  4. 如何快速建立一个测试资源Web服务器及异步获取资源(Unity3D)

    背景 1.最近看了几位专栏作家的文章,几篇提到了资源通过网络的动态获取.如何建立一个快速的测试环境,不免是一个问题,也就最简单的就是假设http服务器了,微软系的当然首选的IIS了,别的也能用阿帕奇或 ...

  5. 深入理解Tornado——一个异步web服务器

    本人的第一次翻译,转载请注明出处:http://www.cnblogs.com/yiwenshengmei/archive/2011/06/08/understanding_tornado.html原 ...

  6. 【Python】使用socketserver建立一个异步TCP服务器

    概述 这篇文章是讲解如何使用socketserver建立一个异步TCP服务器,其中Python版本为3.5.1. socketserver主要的类 socketserver模块中的类主要有以下几个:1 ...

  7. Node:使用express搭建一个简易的服务器

    ①安装node环境 在node.js官网下载LTS长期支持版本,然后傻瓜式安装 ②查看是否安装成功 打开cmd终端,输入node -v 有版本号,则安装成功.再输入npm -v 有版本号,则npm也安 ...

  8. python -m http.server 搭建一个简易web下载服务器

    在打vulnhub靶场的时候遇到的一个问题 目录 一.进到需要发送的安装包目录 二.开启http服务 三.访问服务器 一.进到需要发送的安装包目录 比如设置一个专门发送,传输的文件的文件夹,cmd命令 ...

  9. 手写简易WEB服务器

    今天我们来写一个类似于Tomcat的简易服务器.可供大家深入理解一下tomcat的工作原理,本文仅供新手参考,请各位大神指正!首先我们要准备的知识是: Socket编程 HTML HTTP协议 服务器 ...

随机推荐

  1. hdu 3864 D_num Pollard_rho算法和Miller_Rabin算法

    D_num Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem De ...

  2. JavaSE习题 第四章 类与对象

    问答题: 1.在声明类时,类名应该遵守哪些习惯? 1.与文件名相同2.首字母大写 2.类体内容中有那两类比较重要的成员? 1.成员变量2.方法 3.实例方法可以操作类变量吗?类方法可以操作实例变量吗? ...

  3. Spring Bean 定义继承

    本例子源于:W3CSchool,在此作记录 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置 ...

  4. 力扣(LeetCode)13. 罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  5. IntelliJ IDEA平台下JNI编程(五)—本地C代码创建Java对象及引用

    本文学习如何在C代码中创建Java对象和对象数组,前面我们学习了C代码中访问Java对象的属性和方法,其实在创建对象时本质上也就是调用构造函数,因此本文知识学习起来也很轻松.有了前面学习数组创建的方法 ...

  6. Android 虹软免费人脸识别 SDK开发

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得集成ArcFace FD 的集成过程非常简单在 ArcFace FD 的 ...

  7. 学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值

    1. df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}]) print df.column ...

  8. java基础题集

    1.什么是java虚拟机?为什么java被称作是“平台无关的编程语言”? java虚拟机是一个可以执行java字节码的虚拟机进程.java源文件被编译成能被java虚拟机执行的字节码文件. java被 ...

  9. Golang sync

    Go1.9.2 sync库里包含下面几类:Mutex/RWMutex/Cond/WaitGroup/Once/Map/Pool 1.Mutex:互斥锁,等同于linux下的pthread_mutex_ ...

  10. InitializingBean和DisposableBean

    InitializingBean 记住一点:InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的子类,在初始化bea ...