2011-09-13 32 views
0

出於測試目的,我正在設法開發一個聊天應用程序來通過本地無線網絡工作。通信傳輸的最佳選擇是什麼? (假設每個電話的唯一信息是本地IP)套接字?如何在本地無線網絡中的兩部電話之間傳輸數據以進行測試?

我提到聊天,因爲它只是用於測試,我的目的是像一些變量的值,數組等

欣賞任何想法/建議:)

+1

我很困惑你的問題,你問的文件傳輸或只是簡單的消息/聊天? – Hyangelo

+0

@Hyangelo你是完全正確的,我正在談論傳輸小包數據(變量,數組,類似的東西)。沒有文件傳輸! – Tiago

+0

提交一個編輯,標題會說數據而不是文件傳輸。 – Hyangelo

回答

1

使用簡單的套接字和緩衝流。制定一組您需要的JSON編碼消息。用這些消息包裝你的數據並通過套接字發送。您需要合併一種方式來表明JSON消息自從經驗以來有多長時間,有時會在消息發送/接收過程中發生滯後/差距。我們所做的是消息的前4個字節(例如Int)指示後續消息的(字節)長度。例如。如果您的json字符串長度爲30個字節,則首先發送30個字節(以字節爲單位),然後發送實際消息,以便通過套接字進行的所有傳輸均由長度 - 淨荷組合組成。

就我個人而言,我已經在一個android項目中做了這個。這比ObjectInputStream/ObjectOutputStream路由的優勢在於,它明顯更輕,並且可以與其他平臺(例如iOS等)互操作。我們甚至使用chunked base64編碼的json有效載荷進行文件傳輸(因此所有消息仍以JSON格式)。

我不知道長度 - 有效載荷對是最好的/唯一的方式去了解它。

+0

問題是,對於套接字,我總是需要開放端口可用性問題......我是對的嗎?該應用程序應該在許多WLAN工作,我不知道我應該如何解決這個問題... – Tiago

+0

那麼你的服務器必須監聽端口,以便客戶端可以連接。如果您確實需要某種方式來宣傳您的服務(例如服務器會話),則可以嘗試查看ZeroConf,特別是在jmDns庫中。我以前親自使用過它來廣播公開會話。 – Hyangelo

1

使用現有的聊天庫(傳輸數據,如Smack),它提供了一個標準化的聊天協議(XMPP)的實現,並完全忽略了低層次的細節。

注意:FTP用於文件傳輸,無論您使用哪種通信,幾乎都會使用TCP基於套接字。唯一的問題是你是否使用原始的TCP並自己編寫協議,或者使用現有的協議和實現,以便擔心應用程序的細節。

+0

是的,我完全忘了FTP只是用於文件傳輸。不幸的是,聊天庫不適合我,因爲我正在開發聊天只是爲了測試數據傳輸 - 我並不關心聊天:)我只需要傳輸小數據包(變量,數組,類似的東西) – Tiago

2

也許最簡單的選擇之一就是使用套接字,將其流包裝在PrintWriterLineNumberReader中,然後發送JSON編碼的數據。對於小的變量/數組應該足夠了。

相關問題