首頁  >  問答  >  主體

ios tcp socket操作问题

伊谢尔伦伊谢尔伦2717 天前335

全部回覆(2)我來回復

  • 高洛峰

    高洛峰2017-04-18 09:38:27

    先聲明下你的問題我回答不了。你是搞網絡的,應該知道一句簡單的為什麼返回 -1 可能不是個 good question.

    其次,試著回答下你的其它問題,順便說下我個人的看法。

    我是N年剛進一家做社群app的新創公司時,用過POSIX,支援 iOS3.1.3~iOS4 系統。我們經理要我把iOS 和Android的IM 都改掉,掉線、重練、卡死、內存、線程很多問題... 為了跨平台,我就首選了POSIX 開發,中間出了很多問題,資料又少,經常晚上加班跟服務端交流學習,那套服務端代碼是經歷過五六年千萬級在線的考驗沉澱下來的。不過後來還是沒堅持下來,最後選擇了 CFNetwork ,後來因為 iOS 的升級出過幾次bug,再後來直到現在一直用的 GCDAsyncSocket。後來也開發過音視頻協定、客戶端自建server等,都沒有用 POSIX。

    說這些其實只是想說你先好好想想為什麼要用POSIX,跨平台?自訂協定?如果都不是,強烈建議選擇更高級的api或使用成熟的第三方函式庫。

    iOS下的 POSIX 一直坑很多,需要有充足的經驗,熟讀蘋果文檔,而且要緊跟系統更新而更新,以及完善的測試。因為選擇POSIX 就意味著要自己處理IP, 支援IPv4/IPv6/IPv6-only, 自己處理Wifi/WWAN切換,IP reachability, VPN,線程安全,內存,各種網絡異常,一些神奇的網絡“假死”等等等...iOS明年起強制https,你也要跟著更新。

    把蘋果官方的網路程式文件看一兩遍是必須的。至於你要的socket庫,很久前見過有幾個移植項目,支援 iOS,現在可能都不維護了,名字我也忘乾淨了,你在開源程式碼託管網站和google groups上搜一下。我是最近測試個東西才玩了幾天segmentfault,根據我現在的觀察,在這裡找不到你現在及以後要碰到的問題的答案,stackoverflow都未必能找到。學習以及解決問題的方法就是看別人程式碼,蘋果開源程式碼是一塊寶地。

    可能我說的嚴重了,也可能你要的功能沒我想像的複雜,還是那句話,除非你必須跨平台或必須實現自訂協議,而且有足夠的時間去填坑,那就接著玩POSIX,否則選用進階api或第三方函式庫。

    友情提示:珍愛生命。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:38:27

    write返回-1後,請使用errno取得錯誤碼

    回覆
    0
  • 取消回覆