2016-06-12 8 views
1

JAVA로 게임을 작성했습니다. 그것은 두명의 플레이어를 가지고 있으며, 하나는 서버가 될 것입니다.IP와 포트로 외부 클라이언트와 직접 통신하는 방법

컴퓨터가 게임을 만들고 제공합니다. 다른 컴퓨터 (외부)는 IP 및 포트를 사용하여 서버에 연결해야합니다. 연결되면 게임이 시작되고 클라이언트 플레이어가 서버로 이동을 보내면 이동이 계산되고 게임 맵에서 새 클라이언트와 서버 위치가 반환되고 업데이트됩니다.

문제는 : 게임 로컬, 로컬 IP를 사용하여 동일한 라우터에서 서버와 클라이언트를 만들면 successfuly 게임이 시작됩니다. 그러나 게임을 만들고 외부 컴퓨터에서 연결하려고하면 서버를 찾을 수 없습니다.

나는 컴퓨터 방화벽이나 라우터의 NAT (내가 너무 많이 이해하지 못했던 것) 일 가능성이 높습니다. 글쎄, 나는 STUN이라고 불리는 것을 발견했다. STUN 서버를 사용하여 방화벽과 라우터 차단을 우회하고, 무료 STUN 서버 (here) 목록을 찾았다. 그러나 나는 그것으로 무엇을 해야할지 모른다. STUN 서버는 서버와 클라이언트 간의 통신을 가능하게 할 것인가?

온라인 서비스를 구입하지 않고 두 대의 컴퓨터 (서버 플레이어 및 클라이언트 플레이어)와 함께 포트 포워드 나 방화벽을 사용하지 않고도 성공적으로 연결할 수 있습니까?

내 게임을 공유하고 싶지만 모든 플레이어가 방화벽을 사용하지 않도록 설정할 수는 없습니다. =/

+1

서버 측에서만 포트 전달/방화벽을 구성해야합니다. 고객은 특별한 일을 할 필요가 없습니다. – gudok

+0

이것은 프로그래밍이 아닌 네트워크 및 네트워크 구성에 대한 질문입니다. 그것은 오프 주제입니다. –

답변

2

직접 (피어 투 피어) 통신의 경우 네트워크 (특히 NAT 뒤의)에 서버를 배치하려면 "NAT Traversal"이라는 흑인 기술을 사용해야합니다.

자세한 내용은 문서에 설명되어 있습니다. 거기에서 "TCP Hole Punching"섹션이 필요합니다.

아무튼 NAT traversal은 모든 경우에 작동하지 않습니다 (NAT는 순회 알고리즘에 의해 예상대로 작동하지 않을 때 항상 예외가 있습니다). 따라서 모든 문제를 해결하는 가장 좋은 방법은 전용 IP 주소를 가진 전용 서버를 어딘가에 배치하여 사용하는 것입니다.