반응형
=======================
=======================
=======================
출처: http://cafe.daum.net/igc123/K3VE/196
Question> 안녕하세요. FSocket으로 서버접속후 서버가 죽거나 서버가 disconnect 시킬때를 감지려면 어떻게 해야 하나요? 현재 코드는 아래와 같습니다. GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Trying to connect."))); ConnectionSocket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_Stream, TEXT("default"), false); FString address = TEXT("127.0.0.1"); int32 port = 6000; FIPv4Address ip; FIPv4Address::Parse(address, ip); TSharedRef<FInternetAddr> addr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr(); addr->SetIp(ip.GetValue()); addr->SetPort(port); bool connected = ConnectionSocket->Connect(*addr); if (connected) { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Connect success."))); } else { GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Connect fail."))); } 접속은 잘되는데 서버를 죽였을때 어떻게 체크를 해야할까요? -------------- Answer> 2가지 방법이 가능하겠습니다. 1>GetConnectionState()를 사용하는 방법. 아래 source 참고하시고요. if( ESocketConnectionState::SCS_Connected == ConnectionSocket->GetConnectionState() ) { //server와 연결이 유효함.^^ } else { //server와 연결이 끊겼음.^^;;; } 위와 같이 하시면, 접속차단을 감지할 수 있습니다.^^ 2>class를 재정의해서 Close() 함수를 재정의하는 방법. class FScokect을 상속 받은 님만의 class FYourSocket을 만드시고, 거기에 있는 Close()라는 함수를 호출시 님만의 특별한 처리를 할 수 있도록 재정의하세요. bool FYourSocket::Close() { //server와 연결이 끊겼음.^^;;; } 위와 같이 하시면, 접속이 끊어졌을 때, Close()가 호출되서 바로 감지할 수 있습니다.^^ 이 방법의 경우, class ISocketSubsystem의 일부( CreateSocket(), ... )와 class FSocketSubsystem[목표 운영체제(windows, iOS, ...)]의 일부를 수정하셔야 가능합니다. 둘중에 하나 고르세요~ ^^ |
=======================
=======================
=======================
반응형
'게임엔진관련 > 언리얼 엔진' 카테고리의 다른 글
언리얼엔진4 프레임워크, 바탕 관련 (0) | 2016.05.19 |
---|---|
[링크]언리얼 개발 유용한 사이트 공유 (리소스, 튜토리얼 등) 관련 (1) | 2016.04.21 |
언리얼 클라이언트 해상도에 따른 제작 설계 관련 (0) | 2016.02.17 |
[Unreal 게시판] FSocket으로 접속차단을 감지하는 방법 관련 (0) | 2016.02.17 |
언리얼 에러 unreal 언리얼4 이상 엔진에서 c++ 프로젝트 생성시 비쥬얼스튜디오 2015이상(Visual Studio 2015) 을 찾지 못하거나 에러 가 날때 (2) | 2016.01.25 |