2009-10-21 5 views
1

P2P에서 작동 할 수 있어야하는 게임용 원격 엔진을 만들었습니다.라우터를 통한 소켓 C#

완벽하게 LAN에서 작동하지만 컴퓨터가 라우터 뒤에있어 인터넷을 통해 통신하려는 경우 문제가 있습니다.

라우터 구성을 조작 할 필요가없는 솔루션이 있습니까? 게이머 대부분은 정보에 익숙하지 않을 수 있으므로 가능한 한 쉽게이 문제를 해결하고 싶습니다.

감사합니다.

KiTe.

답변

4

OUTGOING 연결을 시작하려면 라우터 뒤에 클라이언트가 있어야합니다. 설정이 완료되면 2 방향 통신을 할 수 있습니다. 이것이 대부분의 P2P 게임에 클라이언트 간의 일치를 설정하는 일종의 서버가있는 이유입니다. 각 클라이언트가 서버 소켓을 설정 한 다음 서로 연결할 수 있습니다.

'NAT 구멍 펀치'라는 대안이있었습니다. 그러나 얼마나 신뢰할 수 있는지 확실하지 않습니다.

이것은 LogMeIn과 VNC를 구분합니다.

+0

흠, 하나의 클라이언트를 PHP API를 통해 웹 사이트에 연결하고 공용 IP 주소를 얻어 소켓을 바인딩하면 작동합니까? (다른 사람도 방법을 불문하고 이것을 얻을 수 있음을 양지하십시오.) – KiTe

+0

아니요, 불행히도 공용 IP는 충분하지 않습니다. 레무스가 말했듯이, 오늘날에는 evryone에 NAT 지원 라우터가 있습니다. 해당 라우터는 사내 IP 주소를 사내 컴퓨터에 할당하고 건물을 떠나는 모든 요청은 로케 IP/포트 쌍을 공용 IP/포트 쌍과 연결시키는 NAT 테이블에 항목을 가져옵니다. 이것은 라우터를 구성하는 것이며 특정 포트의 들어오는 요청을 집 안의 특정 컴퓨터에 매핑합니다. 외부 컴퓨터는 내부 IP를 알 수 없습니다. – LoveMeSomeCode

1

요즘 대부분의 가정 사용자는 NAT 형태로되어 있습니다. 실제로는 응용 프로그램 수신 대기 포트가 인터넷에서 도달 할 수 없으므로 실제 피어 - 투 - 피어 통신을 설정하는 것이 불가능합니다. 이론적으로

는 (고가의 권한에서 실행) 응용 프로그램 포트 (Internet Gateway Device Protocol를 통해) 홈 라우터에 동적으로 전달을 활성화 할 수 있습니다 UPnP있다, 그러나 실제로이 내가 그것의 실제 사용을 보지 못한 정도로 신뢰할 .

가장 신뢰할만한 솔루션은 을 시작한 클라이언트간에 패킷을 전달하는 중앙 허브 (게임 서버)를 NAT 장치 뒤에서 연결하는 것입니다. EC2와 같은 역동적 인 JIT (Just-In-Time) 솔루션을 사용하는 경우에도 심각한 비용이 될 수있는 허브 구축 및 운영 비용을 절감해야하기 때문에 심각한 비용이 듭니다.

업데이트

은 아마도 당신은 CodePlex의 UPnP NAT traveral project을 사용할 수 있습니다.