2012-12-24 112 views
-1

我曾爲了找到在C++ socket編程教程一直在尋找在互聯網附近。我發現了其中一些,但他們沒有一個真正幫助我製作一臺我可以使用的服務器。C++網絡/套接字編程

我希望做C++中的服務器可以發送和接收的數據包,但所有的教程/例子我能​​看到的是大約發送/接收

我對C++的平均經驗。我正在使用Ubuntu(Linux)的計算機。

如果有人可以解釋我怎麼能有這樣的發送/接收不是字符串的,或指向我一個很好的教程使用POSIX的API解釋我怎麼樣,最好的服務器,這將是非常巨大的並幫助我很多。

-ojima

編輯

(我顯然是說 '包',但我的意思是 '包')

所以,讓我們說,我想利用一個Java遊戲,說我的世界,並用C++編寫它的服務器。根據MinecraftCoalition,(Java)客戶端發送包含數據的「數據包」。 我想知道,我如何接收(或解釋)這些數據包?

MineCraft Coalition reference

+2

所以,在你的心中,數據包和字符串有什麼區別? [順便一提,發送數據包爲字符串是一個不錯的主意,除非你確定知道接收數據包的是什麼,因爲如果它是「一些隨機設備」,你必須擔心字節順序和所有其他方式) –

+2

你叫什麼包?像一個rpm或deb? –

+0

在我看來,區別在於(簡單地說):字符串是一系列字節(字符),而包是一組值。 – ojima

回答

0

的插座將發送和接收的字節僅陣列。轉換爲字符串很容易,因此經常用作示例。您可以將這些字節數組轉換爲任何包。

2

如果你談論的二進制數據塊,然後它是非常簡單的事,但你必須要知道的,你要發送的架構的endianness - 這可能不一樣接收器可能意味着數據沒有被正確重建。

你可能會更好看一些像Boost.Asio將藉此在它的步幅,並專門針對C++。

+0

+1 Boost Asio –

1

如果你想發送的原始數據(字符數組),所不同的是微妙與C字符串(你要記住終止「\ 0」)。這就是爲什麼大多數文檔不會真的有所作爲。

我的建議是:

  1. 選擇一種方式對你的數據轉換爲二進制格式(升壓::連載,協議緩衝區是體面的選擇,但不是唯一的一個)。
  2. 選擇一些抽象庫像Boost.Asio的或者甚至ZMQ(再有其他的選擇)。

我不確信在大多數使用情況下工作在原始套接字上,而且一些C++抽象總是令人愉快的。