一个简单的web服务器
首先需要引入命名空间: System.Net,关于网络编程的大部分类型及操作都可以在这个命名空间下找到。
IPAddress:类用来表示一个ip地址。
IPEndPoint:用来表示一个IP地址和一个端口号的组合,称为网络的端点。
System.Net.Sockets:命名空间中提供了基于Socket编程的数据类型。
Socket类封装了Socket的操作。
常见操作:
Listen:设置基于连接通信的socket进入监听状态,并设置等待队列的长度。
Accept:等待一个新的连接,当新连接到达的时候,返回一个针对新连接的Socket对象。通过这个新的socket对象,可以与新的连接通信。
Receive:通过Socket接收字节数据,保存到一个字节数组中,返回实际接收的字节数。
Send:通过socket发送预先保存在字节数组中的数据。
通过socket创建一个简单的web服务器,通过端口8888访问该服务器,向浏览器返回一个静态页面。这个示例,通过浏览器发送请求,并由服务器生成消息响应给浏览器。
web服务器
{ class Program
{ static void Main(string[] args)
{ //取得本机的loopback网络地址,即127.0.0.1
IPAddress ip = IPAddress.Loopback; //创建可以访问的端点,8888表示一个端口号,如果设置为0,表示一个空闲的端口号
IPEndPoint endPoint = new IPEndPoint(ip, 8888); //创建socket,使用ipv4地址,传输控制协议tcp,双向可靠基于连接的字节流
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //将socket绑定到一个端点上 socket.Bind(endPoint); //设置连接队列的长度
socket.Listen(10);
Console.WriteLine(" 开始监听,端口号:{0}", endPoint.Port); while (true)
{ //开始监听,这个方法会阻塞线程的执行,直到收到一个客户端的连接请求
Socket client = socket.Accept(); //输出客户端的地址 Console.WriteLine(client.RemoteEndPoint); //准备读取客户端请求的数据,去读的数据将保存在一个数组中
byte[] buffer = new byte[4096]; //接收数据
int length = client.Receive(buffer, buffer.Length, SocketFlags.None); //将请求的数据翻译为utf8
System.Text.Encoding utf8 = System.Text.Encoding.UTF8; 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); //向客户端发送状态消息 client.Send(statusLineBuffer); //向客户端发送回应头 client.Send(responseHeaderBuffer); //头部与内容的分割行
client.Send(new byte[] { 13, 10 }); //向客户端发送内容部分 client.Send(responseBodyBuffer); //断开与客户端的连接 client.Close(); //关闭服务器 socket.Close(); break;
}
Console.Read();
}
}
}
启动服务器,并在浏览器中输入http://localhost:8888/
服务端收到的请求内容
总结
通过搭建这个简单的web服务器,了解你在浏览器输入地址,然后回车,服务端是如何处理的以及如何响应的。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦