基於TcpListener的web伺服器
寫在前面
上篇文章根據《asp.net 本質論》書上提供的例子,實現了一個簡單的web伺服器,本篇文章將介紹另一種實現方式——基於TcpListener的web伺服器。
TcpListener
名稱空間System.Net.Sockets下的TcpListener類簡化了基於tcp協議的監聽程式。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Net.Sockets;namespace TcpListenerWebServer
{ class Program
{ static void Main(string[] args)
{ //取得本機的loopback網路地址,即127.0.0.1
IPAddress ip = IPAddress.Loopback; //建立可以訪問的網路端點,8888表示埠號
IPEndPoint endpoint = new IPEndPoint(ip, 8888); //初始化tcp監聽器
TcpListener listener = new TcpListener(endpoint); //開啟監聽器 listener.Start(); //列印提示
Console.WriteLine("監聽開始......"); while (true)
{ //AcceptTcpClient方法將阻塞程式,直到一個客戶端的連線到達監聽器,返回一個TcpClient型別的物件。可透過該物件與客戶端進行通訊
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("與客戶端已經建立連線....."); //得到一個網路流,透過TcpClient可以得到一個用於輸入和輸出的網路流物件NetworkStream,對Socket的輸入和輸出進行了封裝。
NetworkStream ns = client.GetStream(); //處理過程使用utf8 進行編碼
System.Text.Encoding utf8 = System.Text.Encoding.UTF8; //設定用於接收的位元組陣列
byte[] buffer = new byte[4096]; int length = ns.Read(buffer, 0, buffer.Length); //得到請求內容
string requestString = utf8.GetString(buffer, 0, length); //列印 Console.WriteLine(requestString); //回應的狀態行
string statusLine = "HTTP/1.1 200 OKrn"; byte[] statusLineBuffer = utf8.GetBytes(statusLine); //準備傳送到客戶端的網頁
string responseBody = "
Hello World.
"; byte[] responseBodyBuffer = utf8.GetBytes(responseBody); //回應的頭部string responseHeader = string.Format( "Content-Type:text/html;charset=UTF-8rnContent-Length: {0}rn", responseBodyBuffer.Length); byte[] responseHeaderBuffer = utf8.GetBytes(responseHeader); //響應狀態行
ns.Write(statusLineBuffer, 0, statusLineBuffer.Length); //響應頭部
ns.Write(responseHeaderBuffer, 0, responseHeaderBuffer.Length); //輸出頭部與內容之間的空行
ns.Write(new byte[] { 13, 10 }, 0, 2); //輸出內容部分
ns.Write(responseBodyBuffer, 0, responseBodyBuffer.Length); //關閉與客戶端的連線 client.Close(); break;
} //關閉伺服器監聽 listener.Stop();
Console.Read();
}
}
}
啟動伺服器,並在瀏覽器中輸入
總結
TcpListener類,簡化了對tcp協議的監聽,透過TcpClient可以得到網路流,然後就可以對網路的輸入和輸出進行操作了,用起來更方便。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3486/viewspace-2800445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NIO學習三、基於NIO的WEB伺服器Web伺服器
- 基於XP架設Web和FTP伺服器基於XP架設Web和FTP伺服器真沒想到WebFTP伺服器
- 基於樹莓派的內網穿透Web伺服器搭建樹莓派內網穿透Web伺服器
- Github基於Web的編輯器GithubWeb
- 基於.htaccess的Web Shell工具htshellsWeb
- 5個基於Web的建模工具Web
- 基於Web的系統測試Web
- aurora - 基於 Web UI 的 Beanstalk 訊息佇列伺服器管理工具WebUIBean佇列伺服器
- 基於 Angular 的企業級 Web 應用伺服器端渲染的推薦建構AngularWeb伺服器
- 基於 deployer 的 Web 端自動部署Web
- 基於gin的golang web開發:路由GolangWeb路由
- 基於gin的golang web開發:dockerGolangWebDocker
- 基於NodeJS的14款Web框架NodeJSWeb框架
- 基於業務的Web應用框架 SimpleFrameworkWeb框架Framework
- 基於HT for Web的Web SCADA工控移動應用Web
- 基於HT for Web的Web SCADA移動工控應用Web
- Linux下Web伺服器應用之基於LAMP構建phpwind論壇LinuxWeb伺服器LAMPPHP
- HttpServer: 基於IOCP模型且整合Openssl的輕量級高效能web伺服器HTTPServer模型Web伺服器
- 基於相關畢業設計論文下載基於WEB,基於java基於JSPWebJavaJS
- docker基於lamp的ctf web題目容器DockerLAMPWeb
- 基於gin的golang web開發:路由二GolangWeb路由
- 基於RSA的WEB前端密碼加密方案Web前端密碼加密
- 基於itchat的Web端微信機器人Web機器人
- 基於REST與Web架構的構想RESTWeb架構
- [Web框架]Spray基於Scala的REST框架SprayWeb框架REST
- 基於JAVA WEB的醫藥管理系統JavaWeb
- (3)Tcp Socket程式設計的封裝類 TcpListener/TcpClientTCP程式設計封裝client
- node基於express的GraphQL API伺服器ExpressAPI伺服器
- 基於VUE的伺服器端渲染(SSR)Vue伺服器
- 基於 Koa + Vue3!一個開源的 Linux 伺服器 Web SSH 皮膚工具!VueLinux伺服器Web
- web DB 公共方法原理基於sqlLiteWebSQL
- 基於HT for Web的3D樹的實現Web3D
- 基於gin的golang web開發:中介軟體GolangWeb
- 基於gin的golang web開發:模型繫結GolangWeb模型
- 基於gin的golang web開發:模型驗證GolangWeb模型
- 基於HTML5的移動Web應用HTMLWeb
- 基於 HTML5 的 Web SCADA 報表HTMLWeb
- Spark 是一個基於Java的微Web框架SparkJavaWeb框架