2011-09-20 94 views
0

我正在編寫客戶端服務器應用程序。在這我將不得不從客戶端傳輸大小爲1024字節的數據包到服務器。如果數據包大小更大,它必須分成兩個數據包。服務器必須瞭解接收到的數據包是新數據包還是繼續使用舊數據包。然後它應該包含協議的版本號。該協議可以被多個應用程序使用,因此數據包還應該包含應用程序標識符以確定哪個應用程序。數據包還應包含crc信息以檢查數據包中的錯誤。任何人都可以建議我爲上述協議設計客戶端和服務器之間的通信。 任何人都可以建議我一些教程,這些教程將解釋數據如何被加密並從客戶端發送,然後在服務器中接收和解碼。應用程序的協議設計

+0

這是功課嗎?你可以使用已經實現的(和很好的)協議,因爲你不會重新發明輪子。 – Blender

+0

你是從零開始構建這個項目作爲一個excercise/class項目嗎?如果沒有,那麼你應該使用像TCP/IP這樣的現成協議。 –

+0

客戶端有大量的消息要發送到服務器。單個消息可以大於1024字節,這將在服務器上接收。因此,如果客戶端的m/c速度很快,以前的消息大小大於1024字節,則下一條消息與前一條消息混合在一起。所以我所做的是在每條消息給客戶端延遲之後,服務器有時間接收當前消息的所有字節。這不是正確的方法,所以我想設計一些標準的方法來做到這一點。我想要一個基於幀的協議,其中每個幀的長度小於等於1024。 –

回答

0

協議是相互理解交換的東西。協議的細節定義了應用程序的可靠性和關鍵任務。

實現簡單協議的方式只是將幀大小嵌入到數據包的開頭。此外,可以將數據作爲大量文件進行異步接收。將它們分開並添加到處理隊列中很簡單。如果您擁有固定的尺寸,而不是分享尺寸,只需閱讀每個1024幀並將其視爲您的幀。一個簡單的計數器將有助於這個權利?

0

除了基本信息之外,還需要引入某種序列編號方案,表示連續編號(第一個包的編號爲0),以便服務器可以理解新的數據包流和以前的數據之間的差異流,並且如果出現無序傳送,也將它們重新排序。

如果您正在設計一個真實世界的應用程序,現在您不必這麼做,因爲您只需選擇TCP/IP進行可靠的事務處理,並且如果您檢查它的詳細信息,它將處理所有您正在說話的情況關於。但是,如果你必須設計一個更小的協議,我建議創建一個協議的小狀態圖來檢查所有路徑是否導致某些最終狀態(協議狀態機),否則很容易錯過某些情況。