참고 : 이것은 게임이 아니라 네트워킹에 관한 질문입니다. 저는 스타 크래프트를 단지 예로 사용하고 있습니다.
게임 스타 크래프트 (안 스타 크래프트 2) 온라인 플레이를 지원합니다. 한 사람이 호스트하고 다른 사람이 참여합니다. 게임 도중 호스트가 떠나면 호스트없이 게임을 계속 진행할 수 있습니다. 어떻게 작동합니까?
다음 시나리오를 고려하십시오.
- 3 대 3을 호스팅합니다. 사람들이 참여하려면 라우터가 6112, TCP 및 UDP를 포워드하도록 구성해야합니다 ( 블리자드 지원 참조 ).
- 다섯 사람이 합류합니다. 모든 사람 (자신 포함)은 라우터 뒤에 있습니다. 게임을 시작합니다.
- 경기 시작 3 분, 약 20 명의 열광자가 제 기지에 쏟아졌습니다. 아무도 나를 도와주지 않습니다.
- 내 기지가 제거되었으므로 떠나야합니다 (게임은 당신에게 선택권을주지 않습니다).
- 호스트없이 게임이 계속됩니다 (홈 팀에는 2 명의 플레이어가 남아 있습니다).
나머지 5 명의 클라이언트 (6112 전달이 필요하지 않은 클라이언트)는 어떻게 연결되어 있습니까?
내가 올바르게 이해한다면 : 두 프로그램이 서로 대화하기를 원한다면, 그 중 하나는 "서버"여야하고 포트에서 연결을 수신해야하는 반면, 다른 하나는 "클라이언트"여야하고 연결 요청을 시작해야합니다. 포트. 그들은 단순히 서로에게 패킷을 보내기 시작할 수 없습니다 (그리고 둘 다 라우터 뒤에있는 경우 어떻게 될지조차 알지 못합니다).
게임을 호스팅하는 사람은 서버이고, 게임에 참여하는 사람은 클라이언트입니다. 클라이언트가 서버와 통신을 시작할 수있는 방법을 쉽게 알 수 있습니다. 내가 얻지 못하는 것은 클라이언트가 서버를 거치지 않고 어떻게 서로 통신을 시작합니까? 인터넷 프로토콜을 통해 서버가 클라이언트 간 연결을 시작할 수 있습니까?
스타 크래프트의 경우 게임 트래픽이 Battle.net 서버를 통과하는 것이 전적으로 가능합니다. 스타 크래프트는 게임 도중 (친구의 메시지 등) Battle.net과의 연결을 유지합니다. 그러나 게임 트래픽이 통과 한 것으로 의심됩니다. 만약 그렇다면 호스트가 6112를 포워딩해야하는 이유는 무엇입니까?
내 질문은 : 여러 클라이언트가 연결된 서버가 그들 사이의 연결을 시작할 수 있습니까?
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
분명히 게임을 시작해야 사용자가 나를 찾을 수 있지만 연결 상태를 유지할 필요는 없습니다.