iOS byte截取 socket解析

來源:互聯網
上載者:User

* 細節學習- iOS byte數組的 截取 socket資料解析*

最近在做socket長串連。遇見一些問題,希望給各位磚友一些參考的資訊

遇見的第一個問題:
返回的socket資料用NSASCIIStringEncoding 字母解析沒有問題。但是 中文字母就是亂碼。這個問題是由於你socket資訊的編碼格式的問題,例如我的socket資訊 是採用 前9個位元組是固定頭的自訂模式。這9個位元組是用ASCII編碼,後邊的內容長度使用utf8來搞得,你直接用ASCII解析是亂碼,用UTF8是解析不出來的。必須把對應的內容截取出來。對應的解碼格式就可以了

第二個問題:
因為socket是長串連。所以,如果有的人用OC內建的rangeofstring方法判斷json來截取,就會出問題,socket的內容是連著的,所以socket的內容是不會間斷的這種截取方式會造成socket粘連,解決方案。可採取自訂資訊頭的方式,把資料的長度在資訊頭9個自己返回

第三個問題就是解析:

解析必須從位元組開始來解析,從前9個位元組擷取後邊的命令長度,json長度。
例如擷取data後 要轉成 byte數組

Byte resverByte = (Byte )[data bytes];

等擷取了命令長度 還有 json長度後,可以分割byte數組來擷取相關資訊

(void)bytesplit2byte:(Byte[])src orc:(Byte[])orc begin:(NSInteger)begin count:(NSInteger)count{

for (NSInteger i = begin; i < begin+count; i++){
orc[i-begin] = src[i];
}
}

擷取想要的的byte[]後,可以轉成 data 再轉成nsstring

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.