강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

chobo님의 프로필 이미지
chobo

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

소켓을 인자로 넘기는 방법이 궁금합니다.

작성

·

167

0

[선생님 답변]

(꼭 사용할 필요는 없지만) 필요한 추가 인자를 넘겨주고 싶을 때

사용하는 것으로 이해를 해주시면 됩니다.

예를 들어 Listener를 2개 두고 각기 다른 포트 번호를 할당해서

클라가 붙는 Listener, 서버끼리 통신을 위한 Listener를 둘 수도 있을텐데,

그렇게 하면 OnAcceptCompleted가 뜰 때 둘 중 어떤 애가 개입한건지를 알기 힘드니

sender에 필요한 추가 정보(ex. listenSocket) 등을 전달해줄 수도 있을겁니다.

우리가 사용하는 코드에선 어차피 추가로 전달할 정보가 없으니

그냥 다 null로 전달해주고 있습니다.

<------------------------------------------------------------>

선생님 말씀하신 대로 제가 코드를 구조만 생각해봤습니다.

전체적으로 수정할 실력이 되지 않아서 이런 흐름인지만 알고 싶어서 

다시 질문드립니다...

아래와 같은 형태를 큰 틀로 잡고 살을 붙이지 형식으로 생각하면 될까요?

// Program.cs

namespace ServerCore

{

    List<Listener> _listnener = new List<Listener>();

    _listener.Add(endPoint1, OnAcceptHandler); // port : 7777

    _listener.Add(endPoint2, OnAcceptHandler); // port : 8888

}

// Listener.cs

namespace ServerCore

{

      if(pending == false)

OnAcceptCompleted(_listenSocket[0], args);

      else if(pending == false)

OnAcceptCompleted(_listenSocket[1], args);    

}

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 일단 코드가 완전체가 아니라 세세한 문제는 건너뛰고 말씀드리면
그렇게 소켓을 인자로 넘겨서 사용하시면 됩니다.
참고로 pending이 true라서  OnAcceptCompleted가 바로 호출되지 않는 버전이라면
실제로도 ListenSocket이 sender에 들어간 버전으로 호출이 될겁니다.

마지막으로 평소에도 겁없이 이것저것 수정해보고 테스트를 하는 방식으로
공부를 해야 더 많은 깨우침을 얻을 수 있습니다.
그러니 일단은 고치고 '무작정' 실행해보는 것을 반복해보시기 바랍니다!

chobo님의 프로필 이미지
chobo

작성한 질문수

질문하기