2015-04-29 18 views
0

我正在製作一個應用程序,我有一個客戶端和一個服務器。客戶端會發送一些座標給服務器,用來移動機器人。我想要的是同步定時器,用於時間戳記日誌數據,以便我可以比較輸入與輸出。通信通過TCP/IP完成,客戶端在C++中完成,而服務器在RAPID(ABB機器人編程語言)中。我的問題是定時器沒有正確同步。如何同步兩個程序的定時器

眼下計時器開始在建立兩者之間的連接:

服務器端: ListenForConnection; startTimer;

客戶端: connectToServer; startTimer;

這不起作用。有沒有一種技術來確保定時器是同步的?

注意:服務器只能通過局域網連接。

+0

你能確保兩者共享相同的時鐘(例如NTP)嗎?在這種情況下,服務器可以將其計時器的絕對結束時間發送給客戶端。然後客戶端可以計算出啓動計時器的時間。 – jsantander

+0

不幸的是,服務器無法連接到客戶端以外的其他任何設備。所以它不能同步到在線時鐘。它只有它的內部計時器。 – larstoc

+0

好吧,你不需要同步到一個外部時鐘,只有一個是主控,另一個是同步到它。 – jsantander

回答

1

您需要在客戶端和服務器之間傳遞時間戳的協議。

現在,大概你有一個發送座標的協議。你需要以某種方式擴展,以允許一方發送定時器信息到另一端。

最簡單的是如果你有雙向溝通的能力。在這種情況下,客戶端不

  1. 連接到服務器
  2. 一直問,直到該服務器有
  3. 服務器說「是我在這裏的時間是1:00」
  4. 客戶端開始發送座標

如果服務器無法發送到客戶端,則客戶端需要不時發送時間戳,服務器將其識別爲時間而不是座標。在第一次發生這種情況之前,兩者不會同步。

+0

謝謝,它是一個雙向溝通,所以很好。我有感覺,服務器端可能會漂移一點。定期讓他們同步會不會很聰明? – larstoc

+0

我應該說這不考慮網絡傳輸延遲,所以你會發現你的客戶端總是關閉幾毫秒。 – jsantander