2012-07-20 3 views
4

TCP/IP 소켓을 통해 두 개의 클라이언트를 연결하려고합니다. 클라이언트는 중간 서버를 사용하여 서로를 발견 할 수 있습니다. 클라이언트가 서로를 발견하면 서버의 개입이 없어야합니다.중간 서버를 사용하여 피어 투 피어 연결 만들기

나는 이것에 대해 약간의 연구를했으며 JXTA을 제안하는 많은 사람들을 발견했습니다. 하지만 나는 처음부터 프로토콜을 직접 만들고 싶습니다. (이후 클라이언트가 브라우저 일 때 WebSocket을 사용하여 동일한 프로토콜을 구현해야하기 때문에). 현재 내 고객은 데스크톱 응용 프로그램 또는 모바일 응용 프로그램이 될 수 있습니다.

내 질문은 :

  1. 어떻게 클라이언트는 서버에서 서로를 발견 할 것입니다? 서버가 클라이언트의 글로벌 IP 주소를 서로 전송하면 해당 정보가 피어 - 투 - 피어 연결을 생성하기에 충분합니까? 클라이언트가 동일한 LAN 네트워크에 있고 서버가 다른 WAN에 있으면 어떻게됩니까?

  2. 클라이언트에 동적 IP 주소가 있습니다. 액티브 소켓이 있어도 IP가 갑자기 바뀔 수 있습니까?

  3. 피어 - 투 - 피어 연결이 비 연속 데이터 전송에 신뢰할 수 있습니까 (채팅 응용 프로그램과 같은)?

[참고 : 피어 - 투 - 피어 연결 I 클라이언트 중 하나 임시 소켓 서버하여 (자바를 사용) 클라이언트 - 서버 TCP/IP 소켓 연결을 설정하는 의미로]

감사합니다 미리.

답변

5

1) 클라이언트가 서버에 연결할 때 다른 클라이언트의 들어오는 연결에 대해 열어 둘 포트 번호를 서버에 알려야합니다. 서버는 클라이언트의 IP 주소를 알 수 있습니다. 그런 다음 서버는 이러한 세부 정보를 상대방/클라이언트와 통신/전송해야합니다. 클라이언트의 실제 위치는 차이를 만들지 않습니다. 두 클라이언트가 같은 네트워크 상에 있다면 네트워크 라우터는 네트워크 라우터를 찾아 통신 경로를 더 짧게 만듭니다.

2) 동적 IP 활성 연결 중에 변경할 수 없습니다 주소 -이 연결이 삭제됩니다 않는 두 클라이언트가 하나의 서버를 통해 다시 시작 연결)

3 할 것이다 경우) 예

+0

위대한 .... 답장을 보내 주셔서 감사합니다. 답변을 뒷받침 해줄 문서에 대한 링크가 있습니까? –

+1

답의 어느 부분에 증거가 필요합니까? 1) 연결이 성공하려면 양측이 서로 IP 주소와 포트 번호를 알아야합니다. 2) 동적 IP 주소 변경은 다음과 같은 두 가지 상황에서 발생할 수 있습니다. 정상 - 클라이언트가 작동하지 않는 동안 (대개 30 분 이상) DNS 서버 (게이트웨이)가 클라이언트와의 연결을 닫고 다른 클라이언트에게 IP 주소를 발급 할 수 있습니다 - 문제로 인해 연결이 끊어졌습니다 - 클라이언트가 다시 연결해야합니다. 3) 소켓에 대한 고유의 제한 시간 값을 설정할 수 있습니다. 기본 연결 시간 제한은 ISP에서 설정합니다. –

+1

좋아, 이제 동의한다. 그 진드기 마크 :) –