2010-12-14 62 views
0

我有一個設備發送數據到服務器。「確定」消息的外觀如何?

  Data 
[ Client ] == > [ Server ] 

我要回一個郵件的服務器上驗證後:

  OK 
[ Client ] < == [ Server ] 

有沒有一個標準的「OK」的消息返回?還有一個「錯誤」消息?它看起來像什麼? (例如「:0011」,「:110F」)

回答

1

你必須設計一個應用級協議。 TCP是一個字節流,所以即使你的客戶端 - >服務器部分中的「數據」定義也需要一些協議,以便接收者能夠知道什麼字節組成數據(什麼時候停止閱讀)。

幾個常見類型的協議是......

  • 長度分隔塊。每條消息都以16或32位長度前綴開始。接下來有很多字節。長度需要按照定義的字節順序(請參見htons, ntohs, etc)。每個使用此協議的人都知道讀取長度前綴,然後讀取許多字節。在網絡上定義了「塊」之後,您可能會在塊的內容上添加一個標題。也許消息類型(ACK,NAK,數據等)後跟一些內容。
  • ASCII換行符分隔。每條消息都是一行ASCII(或UTF8等)文本。它以換行符結束。換行的換行結束符與上面的塊的長度前綴具有相同的作用。然後定義每行中的內容(如空格或逗號分隔的ASCII/UTF8 /任何字段)。在某處,你可以定義數據看起來像ACK,等等。

我敢肯定,你可以想出其他的想法,但這是基本的工作:在TCP的頂部定義你的應用層協議字節流。

+0

因此,如果我瞭解「ACK」沒有默認消息,則必須創建消息並在數據字段中創建我自己的「ACK」。 – BrunoLM 2010-12-15 16:01:22

+0

TCP協議中內置了一些低級ACK。但這只是在兩臺主機上的操作系統級別的TCP實現之間。這對於應用程序級別確認交換的優劣是沒有用的。 TCP是一個字節流 - 僅此而已。甚至沒有「消息」這樣的東西,更不用說「默認的ACK消息」。您必須在TCP字節流之上構建任何更高級別的協議。 – 2010-12-15 16:29:52