第二人生的原始碼分析 二十六 底層網路協議

2021-08-22 15:24:32 字數 1064 閱讀 8824

為了理解第二人生的客戶端與伺服器的溝通,那麼下面就來分析一下第二人生採用的網路協議。在目前的網路裡,主要有兩個協議:tcp和udp,而第二人生裡是採用udp協議。tcp協議與udp協議的主要區別,就是tcp有流量控制,可靠性控制,ip層組包功能,連線需要三次握手,而udp沒有這些保證,因此udp傳送的資料報需要自己來管理資料的有序性和可靠性。先來分析最底層的協議,它呼叫udp傳送資料的原始碼如下:

#001// returns true on success.

#002bool send_packet(int hsocket, const char *sendbuffer, int size, u32 recipient, int nport)

#003

#030

llinfos << "sendto() failed to " << u32_to_ip_string(recipient) << ":" << nport

#031

<< ", error " << last_error << llendl;

#032

} #033

} #034

} while ((nret == socket_error)

#035

&&(last_error == wsaewouldblock));

#036

#037

return (nret != socket_error);

#038}

在13行裡呼叫windows api函式sendto來傳送資料sendbuffer到目標位址stdstaddr裡,這樣就可以把資料交給windows的網路去傳送資料了。由於這裡採用非同步的udp來傳送資料,因此採用了乙個do while來處理正在阻塞的情況。當傳送不成功,並且錯誤碼是wsaewouldblock,說明windows api正在傳送過程中,不能接收資料,這樣就迴圈地檢查,直到傳送成功,或者出錯為止。第二人生裡跟伺服器傳送的訊息,就是這樣傳送出去的,看起來比較簡單吧。

蔡軍生深圳

第二人生的原始碼分析 二十六 底層網路協議

為了理解第二人生的客戶端與伺服器的溝通,那麼下面就來分析一下第二人生採用的網路協議。在目前的網路裡,主要有兩個協議 tcp和udp,而第二人生裡是採用udp協議。tcp協議與udp協議的主要區別,就是tcp有流量控制,可靠性控制,ip層組包功能,連線需要三次握手,而udp沒有這些保證,因此udp傳送...

第二人生的原始碼分析 2 第二人生的基本功能

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!第二人生的基功能可以定義為網路遊戲 社交網路和 web2.0 作為網路遊戲,它可以讓人扮演角色,也就是第二人生裡的居民。居民只要買到地,或者租到地後就可以建造各種各樣的自己想得到的東西。比如建造遊樂園,或者建造電影院,又或者建造過山車。同時,還可以...

第二人生的原始碼分析 二十 顯示人物名稱

在第二人生裡,每個人物顯示都有乙個名稱,那麼這個名稱又是怎麼樣顯示出來的呢?怎麼樣實現的呢?帶著這兩個問題,下面就去分析第二人生裡面的實現 它的人物名稱顯示如下 從上面的上,可以看到人物的頭上有乙個名稱顯示,用來標識人物角色。要顯示這個人物名稱,肯定是在二維的空間裡顯示的。每個人都有乙個名稱顯示,很...