.net core Socket

Socket是什麼

 

 

實際上socket是對TCP/IP協議的封裝,它的出現只是使得程序員更方便地使用TCP/IP協議棧而已。socket自己並非協議,它是應用層與TCP/IP協議族通訊的中間軟件抽象層,是一組調用接口(TCP/IP網絡的API函數)。更加方便程序員使用傳輸層html

TCP/IP只是一個協議棧,就像操做系統的運行機制同樣,必需要具體實現,同時還要提供對外的操做接口。
這個就像操做系統會提供標準的編程接口,好比win32編程接口同樣。
TCP/IP也要提供可供程序員作網絡開發所用的接口,這就是Socket編程接口。」nginx

HTTP是轎車,提供了封裝或者顯示數據的具體形式;。
Socket是發動機,提供了網絡通訊的能力。git

實際上,傳輸層的TCP是基於網絡層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket自己不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的接口。程序員

https://blog.csdn.net/github_34606293/article/details/78230456github

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------web

應用層  http/https編程

  http做用,  解決了一個數據包裝的問題服務器

  http報文  request報文  response報文   報文都是嚴格的格式約束網絡

傳輸層   socket(tcp/ip協議)  tcp  udpapp

  解決了數據如何在網絡中傳輸的問題。。 (面向鏈接仍是非鏈接的)

網絡層 ip

 

socket服務器

 

 

 

 

 

 

//AddressFamily 地址類型。採用IP4 //SocketType 傳輸數據類型 //ProtocolType 協議類型
static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); public static void Start() { socket.Bind(new IPEndPoint(IPAddress.Any, 8002)); socket.Listen(100); //接收客戶端的 Socket請求 第一個參數是一個委託,第二個參數是第一個參數的參數
 socket.BeginAccept(OnAccept, socket); Console.WriteLine("當前web服務器啓動成功,端口號爲:8002"); }
public static void OnAccept(IAsyncResult ar) { var serverSocket = ar.AsyncState as Socket; //客戶端socket
            var clientSocket = serverSocket.EndAccept(ar); //服務端進行下一步監聽
 serverSocket.BeginAccept(OnAccept, serverSocket); var bytes = new byte[1000]; //獲取客戶端socket內容
            var len = clientSocket.Receive(bytes); //轉化正字符串
            var request = Encoding.UTF8.GetString(bytes, 0, len); var response = string.Empty; if (!string.IsNullOrEmpty(request) && !request.Contains("favicon.ico")) { // /1.html
                var filePath = request.Split("\r\n")[0].Split(" ")[1].TrimStart('/'); //獲取文件內容
                response = System.IO.File.ReadAllText(filePath, Encoding.UTF8); } Console.WriteLine(request+"標識執行了"); //按照http的響應報文返回
            var responseHeader = string.Format(@"HTTP/1.1 200 OK Date: Sun, 26 Aug 2018 03:33:36 GMT Server: nginx Content-Type: text/html; charset=utf-8 Cache-Control: no-cache Pragma: no-cache Via: hngd_ax63.139 X-Via: 1.1 tjhtapp63.147:3800, 1.1 cbsshdf-A4-2-D-14.32:8101 Connection: keep-alive Content-Length: {0} ", Encoding.UTF8.GetByteCount(response)); //返回給客戶端了 能夠屢次返回
 clientSocket.Send(Encoding.UTF8.GetBytes(responseHeader)); clientSocket.Send(Encoding.UTF8.GetBytes(response)); clientSocket.Close(); }

 

一個也會可能會有屢次請求。

 下載代碼

相關文章
相關標籤/搜索