• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

interlocked.Exchange(ref _disconnected, 1) == 1

22.07.11 15:13 작성 조회수 190

0

안녕하세요

disconnect() 함수 안에서

if(interlocked.Exchange(ref _disconnected, 1) == 1) 체크를 해서 두번 실행하는것을 방지한다고 했는데

테스트를 위해 Disconnect()를 직접적으로 두번 불러서 했지만 실제로 게임이 진행되고 있는 과정에서 두번 실행되는 경우의 수가

서버쪽 셰션에서 Send를 할때 Disconnect가 이루어 졌는데 그때 갑자기 클라이언트로 부터 Recv가 들어오면서 이미 send쪽에서 해당 클라 셰션을 disconnect가 되어 있는 상황으로 recv 쪽에서 예외가 발생하면서  Disconnect를 실행되는데 상황이 될 수 있을까요??

답변 2

·

답변을 작성해보세요.

1

해킹 의심되는 수상한 유저를 킥할 수도 있고
유저가 자발적으로 게임 종료를 할 수도 있고
네트워크 연결이 끊겼을 수도 있고
아주 다양한 경우의 수가 존재할 수 있습니다.

0

LEETO님의 프로필

LEETO

질문자

2022.07.15

답변 감사합니다.



제가 유니티로 APK추출해서 핸드폰에서 서버에 연결할려고했는데 
생각해보니 

기존꺼 서버에 연결할떄

string host = Dns.GetHostName();
			IPHostEntry ipHost = Dns.GetHostEntry(host);
			IPAddress ipAddr = ipHost.AddressList[0];
			IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777);

 

이렇게 GetHostEntry를 해서 현재 유니티가 실행되고있는 컴퓨터으 IP를 가져와 서버에 접속을 하고 있는데 

서버는 컴퓨터에서 실행하고 
이를 APK로 추출해서 핸드폰으로 가쟈와 서버 컴퓨터에 연결할려면 어떤 값을 넣어줘야하나요??
그냥 해당 서버가 실행되고 있는 IP만 넣어주고 
똑같이 7777로 하면 될까요??

7777 뜻이 정확히 무슨뜻인지 모르겠어요..

그리고 검색해보니 같은 네트워크안에 있어야 된다는 말도 있구 한데
만약에 같은 서로 다른 네트워크(물리적으로 다른 지역)에서 하고싶으면 AWS 같은 유료 서비스 같은걸 이용해야하나요 ??

 

서버와 휴대폰이 같은 네트워크 망에 있다면 (동일 wifi라면)
ipconfig에서 치는 서버의 사설IP를 넣어주시면 되고,
그게 아니라 정말 진짜 상황처럼 하려면 문제가 더 복잡해집니다.
아예 AWS에 원격으로 서버를 임대해서 올리거나,
로컬에서 하려면 [고정 IP]를 확보할 수 있어야 하는데
다양한 방법이 존재해서 관련해서는 검색을 해보시기 바랍니다.
(포트 포워딩, DDNS 등.)