2010-04-25 3 views
4

C#에서 채팅 프로그램과 같은 피어 투 피어를 코딩하려고합니다. 네트워킹이 어떻게 작동하는지 알아 내려고 노력 중입니다. 그 개념은 각 피어가 동시에 클라이언트와 서버라는 것을 알고 있습니다. 그것은 연결하고 연결할 수 있습니다. 하지만 내 질문은, 그 컴퓨터에 전달되는 포트없이 라우터 뒤에있는 컴퓨터에 어떻게 연결합니까? 비트 토 런트 (Bittorrent)와 같은 문제는 아무런 문제가 없다는 것을 알고 있습니다. 동료의 목록과 수신 대기 포트를 추적하기 위해 추적기를 사용할 계획 이었지만 라우터 문제를 해결하는 방법을 아직 이해하지 못했습니다. 누군가 설명해 주시겠습니까?C# 피어 - 투 - 피어 네트워킹 - 라우터 둘러보기

답변

3

John Feminella의 답변 외에도 많은 소비자 네트워크 장치가 지원하는 UPNP 서비스를 사용하는 것이 좋습니다.

4

네 말이 맞아, 사소하지 않아. 문제는 NAT라고하는 것 또는 network address translation입니다. 기본적으로 자신의 로컬 네트워크 내에서 사용하는 IP는 고유하지만 공용 인터넷의 광범위한 맥락에서 동일한 라우터 뒤에있는 많은 사람들이 동일한 공용 IP를 갖습니다. 따라서 IP와 일부 데이터가 주어지면 상대방의 어느 사람이 반드시 IP를 가져와야하는지 알 수 없습니다.

가장 효과적이고 쉬운 솔루션은 제 3자가 자체적으로 데이터 스트림에 삽입하여 연결을 중개하는 것입니다. 채팅하는 각 사람이 동시에 "클라이언트"와 "서버"가되는 대신 하나의 서버가 있으며 잘 알려진 공용 위치에 있습니다. 그러면 모든 사람들이 그것에 연결됩니다. 그런 다음 서버는 통신을 관리하고 채팅하는 동안 사람들에게 메시지를 전송합니다.

다른 해결책이 있습니다. 예를 들어, 잘 알려진 서버를 사용하는 대신 잘 알려진 포트 ()를 사용할 수 있습니다. 모든 통신은이 포트에서 이루어집니다. 그런 다음 서버는 필요하지 않지만 모든 엔드 포인트는 해당 포트를 열어야하므로 미리 구성해야합니다.

+0

서버 == 포트에서 연결을 수신 대기 중입니다. –

+0

@ 그렉 : 아마도 그 말을 더 잘 표현할 수있었습니다. 내가 의미하는 바는 "... 잘 알려진 엔드 포인트와 잘 알려진 포트를 모두 사용하는 대신 모든 사람들이 미리 구성하고 모든 피어를 서로 알 수있는 한 잘 알려진 포트 만 가질 수 있습니다 . " 채팅 프로그램에별로 도움이되지 않지만 가능합니다. –

관련 문제