本文摘自PHP中文网,作者黄舟,侵删。
这篇文章主要介绍了关于C#利用Socket实现创建一个小型Web Server的相关资料,文中通过示例代码介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。要实现了Web Server,通过以下几句代码浏览器访问就可以获得访问的数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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];
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 头
1 2 3 4 5 6 7 8 9 10 | 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 不是一直没用么?如下:
1 | string requestText = Encoding.UTF8.GetString(data, 0, length);
|
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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#使用Socket创建一个小型的Web Server代码分享的详细内容!
相关阅读 >>
C#基础入门-变量介绍
C#获取ip及判断ip是否在区间的示例代码
C#计算标准偏差相当于excel中的stdev函数的代码案例
C#将unicode编码转换为汉字字符串的代码分析
C#正则表达式匹配与替换字符串功能示例
C#基础入门-简单了解注释
C#最齐全的上传图片方法介绍
C#用来做什么的
具体介绍C#使用selenium+phantomjs抓取数据的案例(图文)
C#高级编程(一)-.net体系结构
更多相关阅读请进入《C#》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#使用Socket创建一个小型的Web Server代码分享