안기훈_자료_보존용_계정 MYPI

안기훈_자료_보존용_계정
접속 : 2875   Lv. 49

Category

Profile

Counter

  • 오늘 : 177 명
  • 전체 : 242889 명
  • Mypi Ver. 0.3.1 β
[Unreal 게시판] FSocket으로 접속차단을 감지하는 방법 (0) 2014/08/25 PM 04:20
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 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, ...)]의 일부를 수정하셔야 가능합니다.



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







Tag:
안기훈, Kee Hoon Ahn, 언리얼, Unreal, UDK, iPhone, iPad, app, 앱, iOS

신고

 
X