iOS IM開發準備工作(三)亂說Socket,iossocket

來源:互聯網
上載者:User

iOS IM開發準備工作(三)亂說Socket,iossocket

  做IM的話,需要用的socket來通訊。如果你瞭解socket的話,可以不看這一篇,謹防被我帶坑。  

  至於什麼是socket,我就貼兩個連結,一個是部落格園的 http://www.cnblogs.com/dolphinX/p/3460545.html,一個是CSDN的http://blog.csdn.net/hguisu/article/details/7445768/。兩個連結講的都很好,不過部落格園的排版看起來舒服一些,而CSDN的有C的代碼可以參看。

  一般情況下,我們做app的都是HTTP請求:你發送一個,伺服器給你回一個。直觀一點,從資料擷取的角度來說,socket可以被動的擷取 伺服器發送給你的資訊(不使用專業術語,可能不恰當,不過我要的效果是簡易說明。。。),也就是說,你不請求也能收到資料資訊。為了做到這樣的效果,你需要與伺服器保持一個長連結,就像打電話一樣。

  雖然用打電話來舉例子不夠恰當,不過可以借鑒一下打電話時我們的行為,這些行為在socket通訊裡面都有相應的說法。

  第一,打電話需要撥號。這和socket建立串連是一個道理,電話那頭有人接聽才算打通。也就是伺服器響應你了,才算串連上。

  第二,打電話需要知道對方是誰。沒有來電顯示的時候,我們都要問一下,對方是誰;有來電顯示的時候,我們會知道對方的號碼。也就是我們需要確認,誰給我打的電話。socket也是一樣,想要做些事,你起碼要先登入吧。

  第三,語音交談的時候。你是可以同時說話和接聽的。socket的話,也就是可以同時接受和發送。

  第四,結束通話。這可能是很多原因,不過你會聽到掛斷的聲音;或者對方很久不講話,你自己掛電話。socket的話,可以主動斷開;如果你半天沒發訊息,伺服器就當你下線了,伺服器就和你就中斷連線。也就是說,需要一個心跳包。

  當然,上面只是打電話。socket還是有些別的屬性。特別是資訊結構。

  socket的通訊報文,一般分為兩段。一段叫做前序,一段就本文。

  報文的前序,它裡面一般有以下資訊:操作的唯一指令 CMD,本文的長度 LENGTH,報文的認證資訊(一般自訂)。前序的長度一般固定,可能是唯一固定的了。CMD是用來說明,我這次發的資訊是幹嘛的;LENGTH是用來說,這次我帶了哪些資料;認證資訊,很重要,關係到安全。

  報文的本文,就是這次要傳遞的有用資訊。按照CMD去解開就好了。

  看到上面兩段,你就應該知道幾件事:

  1、接受報文後,必須先解開報文的前序。如果這一步有異常,直接丟掉這段前序,去讀下一個前序。

  2、本文的長度必須按照前序裡面的來截取。本文解開的結構需要對照CMD來處理。長度為0,需要處理;CMD不存在,需要處理。

  有人會問iOS的 socket怎麼用啊。我想說,從建立串連到可以收發,第三方都幫你做了,你要做的就是區分前序和本文。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.