全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#创建一个小型Web Server(Socket实现)

要实现了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/1.x + 空格 + 状态码 + 空格 + 描述
  • 中间行:名称 + 冒号 + 空格(也可以省略) + 值
  • 最后行:空行

格式一定要正确,否则影响浏览器对 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小时内与您取得联系。