基於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於XP架設Web和FTP伺服器基於XP架設Web和FTP伺服器真沒想到WebFTP伺服器
- 基於樹莓派的內網穿透Web伺服器搭建樹莓派內網穿透Web伺服器
- Github基於Web的編輯器GithubWeb
- aurora - 基於 Web UI 的 Beanstalk 訊息佇列伺服器管理工具WebUIBean佇列伺服器
- 基於gin的golang web開發:路由GolangWeb路由
- 基於gin的golang web開發:dockerGolangWebDocker
- 基於 deployer 的 Web 端自動部署Web
- 基於 Angular 的企業級 Web 應用伺服器端渲染的推薦建構AngularWeb伺服器
- HttpServer: 基於IOCP模型且整合Openssl的輕量級高效能web伺服器HTTPServer模型Web伺服器
- 基於相關畢業設計論文下載基於WEB,基於java基於JSPWebJavaJS
- 基於 Koa + Vue3!一個開源的 Linux 伺服器 Web SSH 皮膚工具!VueLinux伺服器Web
- docker基於lamp的ctf web題目容器DockerLAMPWeb
- 基於gin的golang web開發:整合swaggerGolangWebSwagger
- 基於gin的golang web開發:路由二GolangWeb路由
- 基於Selenium + Python的web自動化框架PythonWeb框架
- node基於express的GraphQL API伺服器ExpressAPI伺服器
- 基於VUE的伺服器端渲染(SSR)Vue伺服器
- (3)Tcp Socket程式設計的封裝類 TcpListener/TcpClientTCP程式設計封裝client
- 基於HTML5的移動Web應用HTMLWeb
- SVNAdmin2 - 基於web的SVN管理系統Web
- 基於gin的golang web開發:模型驗證GolangWeb模型
- 基於gin的golang web開發:模型繫結GolangWeb模型
- 基於gin的golang web開發:中介軟體GolangWeb
- 基於Python的web架構之Tornado+FlaskPythonWeb架構Flask
- lenneth — 基於koa2 的web極簡框架Web框架
- lenneth -- 基於koa2 的web極簡框架Web框架
- web DB 公共方法原理基於sqlLiteWebSQL
- Ocean:基於容器的無伺服器基礎架構引擎伺服器架構
- 基於WebSocket的modbus通訊(一)- 伺服器Web伺服器
- 基於 BaGet 搭建 Nuget 伺服器伺服器
- 基於go語言gin框架的web專案骨架Go框架Web
- 輕鬆搭建基於 SpringBoot + Vue 的 Web 商城應用Spring BootVueWeb
- 基於gin框架封裝的web專案骨架goskeleton框架封裝WebGo
- 基於gin的golang web開發:認證利器jwtGolangWebJWT
- 基於gin的golang web開發:服務間呼叫GolangWeb
- 基於Python+Django+Jquery架構的Web開發PythonDjangojQuery架構Web
- 基於 Stencil 構建 Web Components 元件庫Web元件
- 《Flask Web開發 基於Python的Web應用開發實戰》簡評FlaskWebPython