在工作中我設計用於控制機器人組的用戶界面之間的聯網。機器人使用UDP廣播來管理彼此的移動。Java的客戶端的Socket和C++(升壓型)服務器
的GUI需要能夠傳達給機器人。爲此,運行中間服務器。所有機器人都會聽它(使用UDP傳感器),並且所有正在運行的GUI都會連接到它(通過TCP)。它管理GUI < - >機器人通信。
然而,服務器用C++編寫Boost庫和GUI是用Java編寫的,有些問題與網絡正在發生。我很容易地用套接字連接服務器:
try {
socket = new Socket(targetAddress, targetPort);
} catch (IOException e) { e.printStackTrace(); }
服務器註冊連接,一切都很好。
然而,當我嘗試發送字符串:
try {
stream.writeUTF(message);
stream.flush();
} catch (IOException e) { e.printStackTrace(); }
注:我最初是用一個PrintWriter來一次發送串一個(的println()),但切換到DataOutputStream類,看看它是否會幫幫我。
我們遇到的問題。即使Java成功,Boost甚至不會註冊我發送的消息。此外,當從服務器發送字符串時,它們的格式不可識別。
尋找到問題的一點建議,加速自動添加「標題」文本到它發送的所有郵件,幫助其存檔接收消息。由於Java沒有這樣做,所以這可能是原因。它是否正確?如果是這樣,我們如何解決它?
的幾個注意事項:
- 由於時間所限,切換到不同的庫/語言大規模是不是一個真正的選擇。但是,如果存在允許服務器接收我發送的消息的C++ TCP庫,並且我們可以很容易地將其集成,那將是完美。
- 當連接到Java服務器時,Java網絡代碼完美工作。 Boost-Java界面似乎遇到了困難。
- 不幸的是,我自己或其他人對這個項目的工作方面是有經驗的網絡。 :(我的經驗是用Java和GUI開發,和其他人是AI程序員/硬件專家。這個問題的任何及所有的幫助將是令人難以置信的歡迎。
你用來構造這些消息的協議是什麼? –
你是什麼意思?我們現在只是測試直接發送字符串數據。上面列出了Java代碼的核心。 Boost代碼基於Boost Asio TCP Synchronous示例。 – Kronos
TCP是一個字節流。我在問接收機應該有多少字節?有頭文件嗎?有沒有定點值? –