ProudNet.Cn
WebsiteProud ConsoleLanguage
  • 🌐ProudNet
    • ProudNet 簡介
    • 下載並安裝
      • ProudNet授權認證方法
      • AMI
    • 項目設定
      • C++
      • C#
      • Mac Xcode
      • Linux
      • Unity3D
        • iOS 建置
      • Unreal Engine 4
      • 運行 PIDL 編譯器
    • 使用 ProudNet
      • 伺服器和客戶端
        • 如何使用伺服器
        • 如何使用客戶端
      • RMI
        • 如何使用RMI
      • PIDL
        • 如何使用PIDL
      • 事件處理
      • 通訊訊息
      • P2P 通訊
        • 如何使用P2P通訊
    • 活用 ProudNet
      • 如何使用它
      • 性能小貼士
    • 在 ProudNet 中使用 DB
      • DB Cache System ver.2
        • DB Cache 理論和理解
        • DB Cache 安裝和網絡設置
        • DB Cache 伺服器和用戶端
        • DB Cache 使用與活用
          • DB Cache 活用法
      • ADO API
      • ODBC API
    • ProudNet 實用程式
  • ProudNet note
    • 技術說明
      • 對主循環的理解
      • 配置服務器防火牆
      • 加密和解密
      • 發生錯誤時的應對事項
      • 錯誤信息列表
      • 同步角色位置
      • 客戶端與服務器通信
      • MiniDump (Error Dump System)
      • [1.6 版本] 服務器間 LAN 通訊器
    • 詞彙表
    • Sample 例題
  • 🌐ProudChat
    • 介紹及使用指南
    • 下載 SDK
      • C++
      • C#
      • Unity3D
      • Unreal Engine 4
Powered by GitBook
On this page
  • 解決因調試器暫停時服務器連接中斷的問題
  • 如果發生建置錯誤
  • P2P通信突然中斷,幾秒後重新恢復通信時
  • 屏蔽 Assert 對話框
  • CFastHeap或CLookasideAllocator相關例外時的解決方法
  • 最多不能同時在線人數超過5000人時
  • 如果顯示找不到 ProudNetClientPlugin.dll 模塊
  1. ProudNet note
  2. 技術說明

發生錯誤時的應對事項

解決因調試器暫停時服務器連接中斷的問題

爲了調試服務器或客戶端,正在調試的程序必然會因斷點設定等而暫時停止。

但是使用ProudNet時,在這些暫停中,數十秒後服務器和客戶端之間的連接就會斷開。 主機之間的連接異常斷開時, 一般都會立即檢測到, 但強制拔掉主機電源或通信線路等解除連接(hard disconnect)時, 不能立即檢測到。

然後每隔一段時間通過主機之間的交換乒乓分組檢測hard disconnect。 調試中的程序在數十秒內處於暫停狀態時,ProudNet也會識別爲hard disconnect,解除主機之間的連接。

爲了解決這一問題,可以使用Proud.CNetServer.SetDefaultTimeoutTimeSec,將感知hard disconnect的時間設定得足夠長(例如一個小時)。

建議僅在調試時設置較長的 Proud.CNetServer.SetDefaultTimeoutTimeSec。

如果將SetDefaultTimeoutTimeSec設置在發佈給玩家的版本中,檢測hard disconnect玩家的斷開檢測可能需要太長的時間。

請注意,偶爾也會有惡意利用hard disconnect的遊戲玩家。

// 例子

Proud::CNetServer* srv = ...;
#ifdef _DEBUG
srv->SetDefaultTimeoutTimeSec(60*10); // 10分鐘
#endif
// 例子
Nettention.Proud.NetServer.SetDefaultTimeoutTimeMs

如果發生建置錯誤

在進行#include <atlbase.h>之前,請嘗試進行include <ProudNetServer.h>或include <ProudNetClietn.h>。 使用stdafx.h時,建議在stdafx.h的最前端加入include <atlbase.h>。

使用.Net Framework的程序有名爲System.String的符號,但ProudNet具有名爲Proud.String的符號。 因此.Net Framework混用時,String這個符號可能需要明示System或Proud中的一個名稱空間。

P2P通信突然中斷,幾秒後重新恢復通信時

ProudNet在P2P通信過程中,如果P2P連接被切斷,感知需要數秒的時間。

屏蔽 Assert 對話框

ProudNet在debug build內部運行過程中出現錯誤使用時,可顯示assert failure對話框。 如果想阻止這種情況發生, assert failure 必須設置成啓用其他操作, 而不是顯示對話框 。

也可以用自己製作的函數代替。 下面是例子。

#include "stdafx.h"
#include <crtdbg.h>
 
int YourReportHook( int reportType, char *message, int *returnValue )
{
    return 1;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    _CrtSetReportHook(YourReportHook);
    assert(0); // now, this won't show you the message box.
    return 0;
}

CFastHeap或CLookasideAllocator相關例外時的解決方法

使用 C++ singleton 創建的實例應保留爲 C++ singleton 而不是全局變量,因爲它確保 WinMain() 或 main() 在返回之前根據依賴對象關係被破壞。

最多不能同時在線人數超過5000人時

如果最多無法接收5000名同時在線者,請確認以下事項。

如果顯示找不到 ProudNetClientPlugin.dll 模塊

如果沒有安裝重新部署包,即使路徑中存在相應的庫,也會出現錯誤。

首次安裝ProudNet時,在最後階段可安裝重新部署包和CMake,安裝後ProudNet安裝路徑下游Bin文件夾中也有重新部署包,可安裝相應文件。

Previous加密和解密Next錯誤信息列表

Last updated 1 year ago

如果判斷P2P連接在中間被阻塞,則將P2P連接切換到旁路模式。 這時無法發送的會同時發送和接收,會消失。

不僅是Server, Client,ProudNet的許多內部客體也使用,該實例包括。 如果將使用Fast Heap的Server, Client等實例作爲全局變量或全局變量的成員變量,則會發生例外。

Reliable 信息
Unreliable 信息
Fast Heap
C++ singleton