所以,我正在開發一個通過套接字與服務器通信的Android應用程序。現在,手機將不斷從服務器獲取數據。數據包不會都是相同的大小。數據包的第一個字節是類型,然後,如果適用,接下來的四個字節表示大小。在那之後,那麼多的浮點數(4字節)。套接字?我應該使用什麼?
什麼是最好的方式來閱讀這些?調用readByte(),readFloat(),readFloat()等,或者使用這些我偶然發現的數據報?解釋爲什麼。如果您想了解更多詳細信息以提供更好的建議,請詢問。
感謝,
所以,我正在開發一個通過套接字與服務器通信的Android應用程序。現在,手機將不斷從服務器獲取數據。數據包不會都是相同的大小。數據包的第一個字節是類型,然後,如果適用,接下來的四個字節表示大小。在那之後,那麼多的浮點數(4字節)。套接字?我應該使用什麼?
什麼是最好的方式來閱讀這些?調用readByte(),readFloat(),readFloat()等,或者使用這些我偶然發現的數據報?解釋爲什麼。如果您想了解更多詳細信息以提供更好的建議,請詢問。
感謝,
聽起來像是你想DataInputStream和BuferredInputStream您的插座輸入流。 你不需要Datagrams,因爲這是UDP而不是套接字。
然後我會用readByte(),可選的readInt(),其次是readFloat()等
IIUC,如果你談論的是JDK的數據報,他們沒有插座,它們對UTP溝通,這是比TCP更輕但可靠性更低,並且通常用於實時音頻/視頻流。
我會使用DataInputStream/DataOutputStream,並使用readByte,readInt,readFloat。這將爲您節省大量有關編碼複雜數字的細節,並添加(薄)錯誤檢測層。
如果你有另一邊的java,它應該沒有問題。如果你的C/C++在另一端,請注意它可以(但不應該)使用little endian而不是big endian,在這種情況下,你的數字(readByte除外)會出現亂碼。你可以很容易地找到在Java中閱讀和小尾數的例程,但它可能會導致在頭幾個小時的痛苦攻擊:)
謝謝,你能指出我在一個永恆的方向,因爲服務器是用C編寫的,還是隻是谷歌搜索了? – rsromano
你可以連接到服務器,捕獲一堆字節,並知道它應該發送什麼,以確定它是否發送bigendian或不..要簡單得多,在java中寫幾行,使用DataInputStream,嘗試連接到服務器,看看是否它返回奇怪的數字:) ..在谷歌的情況下,「Java小端序列」,你會發現的東西。 –
啊,謝謝你的回答 – rsromano