ProudNet Docs
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 참고자료
    • 기술노트
      • 메인 루프의 이해
      • 서버 방화벽 설정
      • 암호화 및 복호화
      • 에러발생 시 대처사항
      • 에러 메시지 목록
      • 캐릭터 위치 동기화
      • 클라이언트-서버 통신
      • MiniDump (오류덤프시스템)
      • [1.6 버전] 서버 간 LAN 통신기
    • 용어집
    • Sample 예제
    • Unity 샘플 클라이언트 가이드
  • Unity 샘플 서버 가이드
  • UE5 샘플 가이드
  • 🌐프라우드 서비스
    • 콘솔 이용 안내
Powered by GitBook
On this page
  1. ProudNet 참고자료
  2. 기술노트

에러발생 시 대처사항

Previous암호화 및 복호화Next에러 메시지 목록

Last updated 1 year ago

Was this helpful?

CtrlK
  • 디버거에 의해 일시 정지 시 서버 연결이 끊어지는 문제 해결
  • 빌드 에러가 발생할 경우
  • P2P 통신이 갑자기 안되다가 몇 초 뒤에 다시 통신이 재개되는 경우
  • Assert 대화 상자 막아버리기
  • CFastHeap 또는 CLookasideAllocator 관련 예외 발생 시 해결 방법
  • 최대 동시접속자 5,000명을 넘기지 못하는 경우
  • ProudNetClientPlugin.dll 모듈을 찾을 수 없다고 나오는 경우

Was this helpful?

디버거에 의해 일시 정지 시 서버 연결이 끊어지는 문제 해결

서버나 클라이언트를 디버깅하기 위해 디버거를 쓰던 중 디버깅 중인 프로그램이 중단점 설정 등에 의해 일시 정지하기 마련입니다.

하지만 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 연결이 막혀버리면 이를 감지하는데 수 초의 시간이 걸립니다.

만약 P2P 연결이 중간에 막혔다는 것으로 판단되면 P2P 연결을 바이패스 모드로 전환합니다. 이때 주고받지 못했던 Reliable 메시지들이 한꺼번에 주고 받아지며 Unreliable 메시지 들은 소실됩니다.

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 관련 예외 발생 시 해결 방법

Server, Client 뿐만 아니라 ProudNet의 많은 내부 객체들은 Fast Heap 을 사용하는데, 이 인스턴스를 C++ singleton 으로 둡니다. Fast Heap 을 사용하는 Server, Client 등의 인스턴스를 전역 변수 또는 전역 변수의 멤버 변수로 두면 예외가 발생됩니다.

C++ singleton 으로 만든 인스턴스는 WinMain() 혹은 main()이 리턴하기 전, 의존 객체 관계에 맞춰 파괴됨을 보장하기 때문에 전역 변수가 아닌 C++ singleton 으로 두어야 합니다.

최대 동시접속자 5,000명을 넘기지 못하는 경우

최대 동시 접속자 5,000명을 못 받는 경우라면 다음을 확인해 보시기 바랍니다.

ProudNetClientPlugin.dll 모듈을 찾을 수 없다고 나오는 경우

재배포 패키지가 설치되어 있지 않으면 해당 라이브러리가 경로에 존재 하더라도 오류가 발생할 수 있습니다.

ProudNet 최초 설치 시 마지막 단계에서 재배포 패키지와 CMake를 설치하실 수 있으며, 설치 후에는 ProudNet 설치 경로 하위 Bin폴더에도 재배포 패키지가 들어있으니 해당 파일로 설치하셔도 됩니다.