要实现了Web Server,通过以下几句代码浏览器访问就可以获得访问的数据。
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketWatch.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 81));
socketWatch.Listen(20); // 参数表示最多可容纳的等待接受的传入连接数,不包含已经建立连接的。
Thread thread = new Thread(delegate(object obj)
{
Socket socketListen = (Socket)obj;
while (true)
{
Socket socket = socketListen.Accept();
byte[] data = new byte[1024 * 1024 * 4]; // 浏览器发来的数据,限定为 4K。
int length = socket.Receive(data, 0, data.Length, SocketFlags.None);
socket.Send(Encoding.UTF8.GetBytes("欢迎访问 www.cftea.com\r\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
});
thread.IsBackground = true;
thread.Start(socketWatch);
但以上只是原理,实际会很复杂,不过就算我们要做简单的 Web Server,还是需要解决两个问题:
一、输出 HTTP 头
byte[] body = Encoding.UTF8.GetBytes("欢迎访问 www.cftea.com\r\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
byte[] head = Encoding.UTF8.GetBytes(@"HTTP/1.1 200 OK
Content-Length: " + body.Length + @"
Content-Type: text/plain
Date: " + string.Format("{0:R}", DateTime.Now) + @"
Server: Cftea Web Server
");
socket.Send(head);
socket.Send(body);
只要有特定的格式,就会被浏览器当作 HTTP 头对待。HTTP 头的格式为:
格式一定要正确,否则影响浏览器对 HTTP 头和 HTTP 体的识别。
二、请求 HTTP 头
到目前为止,我们还不知道浏览器中输入的 URL 是什么呢。请求的 HTTP 头也是有特定格式的,我们只需要将其获取出来,进行拆解,就可以获取 URL 了。
拆解不是难事,我们说一说如何获取吧。前面的 data、length 不是一直没用么?如下:
string requestText = Encoding.UTF8.GetString(data, 0, length);
完整代码
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketWatch.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 81));
socketWatch.Listen(20); // 参数表示最多可容纳的等待接受的传入连接数,不包含已经建立连接的。
Thread thread = new Thread(delegate(object obj)
{
Socket socketListen = (Socket)obj;
while (true)
{
using (Socket socket = socketListen.Accept())
{
byte[] data = new byte[1024 * 1024 * 4]; // 浏览器发来的数据
int length = socket.Receive(data, 0, data.Length, SocketFlags.None);
if (length > 0)
{
string requestText = Encoding.UTF8.GetString(data, 0, length);
byte[] body = Encoding.UTF8.GetBytes(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
byte[] head = Encoding.UTF8.GetBytes(@"HTTP/1.1 200 OK
Content-Length: " + body.Length + @"
Content-Type: text/plain
Date: " + string.Format("{0:R}", DateTime.Now) + @"
Server: Cftea Web Server
");
socket.Send(head);
socket.Send(body);
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
});
thread.IsBackground = true;
thread.Start(socketWatch);
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# c
# webserver
# web
# socket
# server
# C#使用SqlServer作为日志数据库的设计与实现
# SQL Server存储过程在C#中调用的简单实现方法
# C#连接SQL Server数据库的实例讲解
# C#使用SqlConnection连接到SQL Server的代码示例
# C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例
# C#连接SQL Server的实现方法
# C#实现连接SQL Server2012数据库并执行SQL语句的方法
# 基于C#动手实现网络服务器Web Server
# C#连接到sql server2008数据库的实例代码
# C#实现的sqlserver操作类实例
# C#实现Excel表数据导入Sql Server数据库中的方法
# C#实现 Server-sent Events的步骤
# 最多
# 欢迎访问
# 就可以
# 不包含
# 连接数
# 就会
# 是有
# 还不
# 将其
# 可容纳
# 要做
# 几句
# 只需要
# 什么呢
# 这篇文章
# 会很
# 头也
# 但以
# 说一说
# 格式为
相关文章:
如何用IIS7快速搭建并优化网站站点?
建站之星安装后界面空白如何解决?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
建站VPS能否同时实现高效与安全翻墙?
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何获取上海专业网站定制建站电话?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
如何高效生成建站之星成品网站源码?
建站之星导航菜单设置与功能模块配置全攻略
微课制作网站有哪些,微课网怎么进?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
婚礼视频制作网站,学习*后期制作的网站有哪些?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
C++如何使用std::optional?(处理可选值)
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
建站之星2.7模板快速切换与批量管理功能操作指南
北京网站制作的公司有哪些,北京白云观官方网站?
如何在Tomcat中配置并部署网站项目?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
Python lxml的etree和ElementTree有什么区别
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
红河网站制作公司,红河事业单位身份证如何上传?
利用JavaScript实现拖拽改变元素大小
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何快速完成中国万网建站详细流程?
如何在七牛云存储上搭建网站并设置自定义域名?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
javascript中对象的定义、使用以及对象和原型链操作小结
如何在云主机上快速搭建网站?
制作网站的基本流程,设计网站的软件是什么?
如何确认建站备案号应放置的具体位置?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
建站之星如何一键生成手机站?
威客平台建站流程解析:高效搭建教程与设计优化方案
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
网站网页制作专业公司,怎样制作自己的网页?
如何在VPS电脑上快速搭建网站?
深圳网站制作案例,网页的相关名词有哪些?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
网站制作模板下载什么软件,ppt模板免费下载网站?
建站org新手必看:2024最新搭建流程与模板选择技巧
高端建站三要素:定制模板、企业官网与响应式设计优化
如何快速搭建支持数据库操作的智能建站平台?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
建站之星后台管理:高效配置与模板优化提升用户体验
建站主机是什么?如何选择适合的建站主机?
建站之星与建站宝盒如何选择最佳方案?
*请认真填写需求信息,我们会在24小时内与您取得联系。