iOS開發之socket簡介

来源:http://www.cnblogs.com/iOS-SZH/archive/2016/04/23/5425456.html
-Advertisement-
Play Games

1,socket是什麼? 2,socket的作用 3,socket怎麼用 4,socket的擴展 —————————————————————— socket是什麼? Socket這個名詞現在有很多不同的意思,這裡主要講到其中2個含義。一是,套接字socket=(IP地址:埠號),是端的概念。二是, ...


1,socket是什麼?

2,socket的作用

3,socket怎麼用

4,socket的擴展

——————————————————————

socket是什麼?

         Socket這個名詞現在有很多不同的意思,這裡主要講到其中2個含義。一是,套接字socket=(IP地址:埠號),是端的概念。二是,socket在應用層和傳輸層之間,是層的概念。

         要理解socket是什麼,首先要理解網路的分層結構,目前internet廣泛使用的TCP/IP模型,總結起來網路模型分為四層,從上層往下依次為:應用層、傳輸層、網路層、接入層。

網路上的兩個程式通過一個雙向的通信連接實現數據的交換,這個連接的一個端點(endpoint)稱為一個socket。(端)

         然後理解系統調用(system call)和應用程式介面(API)的概念。系統調用就是應用程式和操作系統之間傳遞控制權。當應用程式啟動系統調用時,就把控制權從應用程式傳遞給系統調用介面,此介面又把控制權傳遞給操作系統,操作系統執行內部的操作,執行完畢控制權又通過系統調用返回給應用程式。這個系統調用介面就是API。API定義了很多系統調用的函數,通過請求調用就可以獲得操作系統的服務。目前最著名就是伯克利為UNIX定義的socket interface。(層)

         回到網路中,傳輸層TCP協議和網路層的IP協議已經集成到操作系統中,應用程式在應用層,這就涉及到應用進程與操作系統的調用,而socket interface就作為應用進程和運輸層協議之間的介面。因此,應用進程要使用TCP/IP協議進行通信就必須通過socket和操作系統進行調用請求服務。

 

 

————————————————————-

socket的作用?

         socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的介面供應用層調用以實現進程在網路中通信。Socket把複雜的TCP/IP協議族隱藏在Socket介面後面,對用戶來說,一組簡單的介面就是全部,讓Socket去組織數據,以符合指定的協議。

 

————————————————————-

socket的怎麼用?

         socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read –> 關閉close”模式來操作。socket是可以理解為一種特殊的文件,socket函數就是對其進行的操作(讀/寫IO、打開、關閉)。

Socket通信的雙方可以分為客戶端和伺服器端,客戶端的基本流程如下:

  1.             創建socket
  2.             連接到伺服器
  3.             發送數據到伺服器
  4.             從伺服器接受數據
  5.             關閉連接

伺服器端的步驟稍微多一些,主要增加了與埠綁定(bind)和監聽(listen)、接受阻塞(accept)等流程

 

——————————————————————

socket的擴展——即socket編程

         socket編程是利用socket介面為應用層自定協議用於應用進程的網路通信。那為什麼要自定義呢,自定義目的是滿足自己的應用需求。例如http協議是應用層使用最多最廣泛的協議,http是單工阻塞性質的協議,如果你需要一個全雙工,無阻塞的雙向傳輸,那http就滿足不了。http定義自己的包頭,你要是覺得傳輸效率極其重要,這樣的包頭太臃腫,你也需要自定義協議。自定義應用層協議就需要socket編程,目前應用的場景有,即時通訊,社交訂閱更新,視頻會議,網路游戲,股票基金實時價格等等。

         另外還有,網路模型ATM,不同於TCP/IP模型,這就相應的有自己的協議和socket,這也用到socket編程。

 

——————————————————————-

 

參考資料

1,      謝希仁《電腦網路(第五版)》

2,      http://www.cnblogs.com/dolphinX/p/3460545.html

3,      http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

4,      http://blog.csdn.net/hguisu/article/details/7445768/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 所謂的瀏覽器相容性問題,是指因為不同的瀏覽器對同 段代碼有不同的解析,造成 顯 效果不統 的情況。在 多 數情況下,我們的需求是, 論 戶 什麼瀏覽器來查看我們的 站或者登陸我們的系統,都應該是統 的顯 效果。所 以瀏覽器的相容性問題是前端開發 員經常會碰到和必須要解決的問題。 在學習瀏覽器相容性之 ...
  • 有話先說:本文的目的主要是向大家描述一下我們在遇見IE8版本一下以及Firefox相容的問題。 針對不同的瀏覽器寫不同的CSS的過程,這就叫CSS hack,也叫寫CSS hack,相信您會對一些比較不易解決的相容問題有一定的興趣。 註意點: 網上很多資料中常常把!important也作為 個hac ...
  • 效果預覽:http://hovertree.com/texiao/js/22/效果圖:代碼如下: 轉自:http://hovertree.com/h/bjaf/meihua.htm 推薦:http://hovertree.com/h/bjaf/h9tb5itb.htm 更多特效:http://www ...
  • 我們知道刪除一個dom節點的時候索引就會發生了改變,甚至是錯誤,就算jq的ecah也無能為力,所以我們只能自己寫個功能了 直接上代碼把,不多說 <!DOCTYPE html> <html> <head> <title>fancyBox - Fancy jQuery Lightbox Alternat ...
  • public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(getActivity(), CaptureActivity.class); getActivity().startActivity(inte ...
  • ★懶載入即延時載入,即當對象需要用到的時候再去載入。其實就是重寫對象的get方法,當系統或者開發者調用對象的get方法時,再去載入對象。 ★註意: 1. 如果是懶載入的話則一定要註意先判斷是否已經有了,如果沒有那麼再去進行實例化 2. 在getter方法里切勿使用self.自己,因為self.自己會 ...
  • 前言部分 註:本文並非絕對原創 大部分內容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已過時並不適用於現在的開發環境。 1、Search Bar 怎樣去掉背景的顏色(storyboard里只能設置backg ...
  • 查看apiDemos,找到View/Animation/shake找到對應的動畫代碼,直接拷貝過來 當導入一個項目的時候,報R文件不存在,很多情況是xml文件出錯了 Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...