我的公司爲我們的系統創建自己的定製android硬件。多個ServerSockets,多個設備併發送到多個套接字
我們目前有2個android設備需要一起通信並同步它們內部的sqlite數據庫。
我開始編寫自定義套接字協議來解決這個問題。這是基於服務器客戶端模型。但是,當我做了更多的開發時,我發現每個設備都需要運行一個服務器套接字,並且可以在系統中與3個或更多設備進行通信,並且服務器可能會死機或重新啓動或崩潰。
所以我的想法是讓每個設備搜索我存儲在一個數組中的一組端口,並綁定到一個當前可用的端口,當設備檢查並創建我的ServerSocket時。
這意味着可能具有DEVICE1 ServerSocket的(1111)和裝置2具有的ServerSocket(1112)等
然後,每個設備通過多個端口將消息發送。例如:device1遍歷數組並打開客戶端套接字併爲每個端口發送消息: 套接字套接字=新套接字(IP,1112); 發送消息... Socket socket = new Socket(IP,1113); 發送消息... 等
Ofcourse我已經做了這個多線程(由一個android服務運行),所以沒有阻止在android設備的UI線程。
我的問題是,我在做對嗎?或者有沒有更好的方法在Java中來做到這一點?
編輯:
我決定添加一些代碼來解釋我的問題。
我必須通過TCP/IP連接在一起的多臺Android設備,我創建這樣每個設備上一個ServerSocket:
ServerSocket serverSocket = new ServerSocket(4000);
現在第二個設備嘗試這個時候,它給了我在Java中的錯誤,因爲其他設備正在使用套接字。他們的IP地址類似於172.23.3.128和172.23.3.127。
因此,即使有不同的IP地址,我也從Java那裏得到一個錯誤,說我已經綁定到了那個真正的端口/ IP。這是我不明白的。
問題在於,每個客戶端都需要充當服務器。基本上每個設備都會打開一個ServerSocket,每個設備將信息發送到不同的端口。使用UDP,我們仍然處於1個服務器,許多客戶端模型。 –
@Juan,也許你誤會了。所有客戶都做同樣的事情;沒有「服務器」。所有的客戶都播放他們的存在,並聽取他人的廣播。 – jedwards
我相信你是對的。但是,這不起作用。當我在java的特定端口註冊ServerSocket時,我無法再從其他設備註冊到它,我只能從我的客戶端向該端口發送消息。我將添加一些代碼。 –