안녕하세요.
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->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