2012-11-05 59 views
0

我有一個任務,我要實現一個遊戲的分數服務器。當遊戲完成時,遊戲將發送()玩家姓名(char * name)和得分(int score)到服務器進行註冊,receive(),並且服務器將返回5個最高分。伯克利插座通信,發送和接收結構

我們打算使用Berkeley sockets和C.經過一些閱讀和學習的例子,我只能找到只發送單個變量的例子。

write(sd, "Hello World", 12); 

char buf[13]; 
read(sd, buf, 12); 
buf[12] = '\0'; 

什麼是平時要做的?發送每個變量(名稱和分數)是單獨的write()函數,還是創建一個包含兩個變量的結構?

Beej指南中的一些閱讀網絡編程我遇到的問題與字節順序(大/小-endian),我必須在帳戶,這部分下的顯示7.4序列化 - 如何收拾數據,並沒有問題,只是在所有示例代碼包中他們浮動和單個變量,有沒有辦法打包整個結構?

還有7.5數據封裝大約需要產生描述瞭如何在客戶端和服務器進行通信,對我來說這看起來更像是一個struct和我不會做的,但目前還沒有什麼協議的曾根節顯示原理的代碼。


總之:我想創建服務器和客戶端之間穩定的通信,我交換的不僅僅是單變量更多,

回答

1

在網絡通信,不存在變數,或結構的概念。你在做什麼是發送一個字節序列。

因此,發送結構的想法與發送單個值相同:將結構轉換爲字節序列(序列化),將其寫入套接字,並在另一端將字節序列轉換回到一個結構(反序列化)。

所以,現在你的問題成爲序列化之一:我如何序列化一個結構?

這只是序列化結構的各個值的組成。

什麼是比較常見的

通常要減少網絡通信量。因此,如果您有預先發送的所有數據,立即發送數據將更加高效,然後通過分別發送每個名稱/分數對來手動分塊數據。