[程式] UE4驗證網路版本的程式碼

作者: yekdniw (yekdniw)   2018-08-10 21:32:27
網頁版
https://yekdniwunrealengine.blogspot.com/2018/08/ue4.html
在開發多人遊戲的時候總是會遇到client沒辦法連上server的情況。
例如有人沒有更新,或是開錯目錄的執行檔等等。
這篇文章稍微提一下UE4如何驗證不同版本的機制以及程式碼在哪邊處理這些事情,
以及如何從log判斷是不是版本有問題。
首先EngineBaseTypes.h 有個ENetworkFailure::NetChecksumMismatch的enum 定義。
而PackageMapClient.cpp 有一些程式碼會檢查讀取物件的NetworkChecksum,
如果判斷不對就會送出NetChecksumMismatch事件。
client會因為上面原因,造成spawn actor失敗,
接著就會送NMT_ActorChannelFailure給server,
此時server就會關掉對這個玩家的連線。
送NMT_ActorChannelFailure的程式碼在 DataChannel.cpp
從client會看到的log:
LogNetPackageMap: Warning: GetObjectFromNetGUID: Network checksum mismatch.
FullNetGUIDPath: [57]/Game/xxxxx.[55]xxxxx.[53]PersistentLevel.[131]xxxxx,
2365598466, 229775609
LogNet: Warning: UActorChannel::ProcessBunch: SerializeNewActor failed to
find/spawn actor. Actor: None, Channel: 30
(LogNet可能預設不會輸出訊息,可能要透過修改參數或是用console command 輸入Log
LogNet All來看)
server會看到的log:
Server connection received: ActorChannelFailure
所以server 或是client看到上述的訊息的話,就可以知道可能兩邊版本有問題,總之還
是記得client跟server都要用相同的build比較不容易出這個狀況。
作者: damody (天亮damody)   2018-08-10 22:26:00
讚 經驗分享
作者: coolrobin (泳圈)   2018-08-12 01:51:00
推推
作者: diac3000 (diac)   2017-01-09 19:59:00
推!

Links booklink

Contact Us: admin [ a t ] ucptt.com