상세 컨텐츠

본문 제목

언리얼 FSocket으로 서버접속후 서버가 죽거나 서버가 disconnect 시킬때를 감지려면 어떻게 해야 하나요?

게임엔진관련/언리얼 엔진

by AlrepondTech 2016. 3. 22. 15:28

본문

반응형

 

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: 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, ...)]의 일부를 수정하셔야 가능합니다.






둘중에 하나 고르세요~ ^^
 

 

=================================

=================================

=================================

 

 

 

 

반응형


관련글 더보기

댓글 영역