2017-11-09 27 views
0

저는 자바 서버와 게임 메이커 스튜디오 클라이언트를 사용하여 게임을 개발하려고합니다. 몇 가지 기본 연결 코드를 작성했으며 내 로컬 네트워크에서 제대로 작동합니다. 그러나 서버를 호스트하고 연결하려고하면 클라이언트는 TCP를 통해 전송 된 서버가 지정한 ID를 얻지 만 UDP 프로토콜이 보낸 명령은받지 못합니다. 서버가 TCP를 통해 연결할 수있는 동안 UDP를 통한 연결을 설정하는 방법 UDP 구멍 펀칭이 필요하다고 들었습니다. 하지만 게임 제작자 스튜디오 네트워킹 기능으로 서버를 작성하고 UDP는 서버에서 동일한 구성으로 연결할 수있었습니다. 그래서 그들은 내장 함수에서 구멍 펀칭을 사용하고 있습니까? 대신에 구멍 펀칭을 구현해야한다면 TCP 만 사용해야합니까? 아니면 어떤 비용으로도 구멍 펀칭을해야합니까?NAT는 TCP를 사용하여 연결된 서버에서 오는 UDP 패킷을 차단합니까?

답변

1

여기에 몇 가지 질문이 있습니다. 그래서 조각별로 구분하려고합니다. 우선 ...

NAT는 TCP를 사용하여 연결된 서버에서 들어오는 UDP 패킷을 차단합니까?

. NAT가 두 컴퓨터 사이에 TCP 연결을 설정했기 때문에 UDP 패킷도 자동으로 전달한다는 의미는 아닙니다.

TCP를 통해 서버가 UDP를 통해 연결을 설정할 수없는 방법은 무엇입니까? UDP는 비 연결 프로토콜입니다, 그래서 "UDP 연결"같은 것은 기술적으로가없는 상태

TCP는 연결 지향 프로토콜입니다. 두 컴퓨터가 UDP를 통해 통신 할 때 UDP 패킷을 앞뒤로 교환하기 만하면 UDP 프로토콜 자체가 아닌 "연결"이 함축되거나 더 높은 수준에서 관리됩니다.

나는 UDP 구멍 펀칭이 필요하다고 들었다. 나는 구멍 펀칭을 구현해야한다면 TCP를 사용해야 만한다. 그렇지 않으면 구멍 펀칭을해야한다.

UDP 구멍 펀칭도 가능하지만 모든 NAT가 호환된다는 것은 100 % 보장되지 않습니다. 대신 TCP 만 사용하여 게임을 만들 수 있습니다. 그런 다음 UDP 구멍 펀치 또는 WebRTC 데이터 채널과 같은 고급 통신 채널을 실험 해보십시오.

+0

정말 고맙습니다. 내가이 분야에서 경험이 있다고 생각하기 때문에 몇 가지 질문이 더 많습니다. UDP를 연결 지향 프로토콜처럼 작동하도록 만들 수 있습니까? fps 게임이 속도를 필요로하기 때문에 그들이 UDP를 사용한다고 확신하기 때문에 다른 온라인 fps 게임은 네트워킹에서 사용합니다. 그들은 구멍 펀칭을 사용합니다. –

+0

감사합니다. 실제로 UDP 구멍 펀칭의 프로세스로, "UDP 연결"을 설정하려는 호환 가능한 NAT를 "알립니다". 구멍 펀칭이 성공하면 NAT는 내부적으로 UDP 패킷을 앞뒤로 전달하는 것을 기억합니다. 모든 NAT가 구멍 펀칭을 지원하는 것은 아닙니다. UDP 구멍 펀칭이 어떻게 작동하는지에 대한 설명은 [Section 3] (http://www.brynosaurus.com/pub/net/p2pnat/)을 참조하십시오. 당신은 맞습니다, 많은 게임들이 UDP를 사용하지만 [다른 문제들] (https://softwareengineering.stackexchange.com/questions/193745/udp-order-of-packets-with-direct-connection)을 소개 할 것입니다. 행운을 빕니다. – v1bri