2016-09-23 2 views
1

전 세계의 서버에 클라이언트를 연결하는 방법을 알고 있습니다!서버없이 두 클라이언트를 연결하십시오.

확인 당신이 운동에 대한 빠른 코드가하려면이 링크 : http://cs.lmu.edu/~ray/notes/javanetexamples/

내 질문은 "어떻게 내가 서버없이 두 개의 클라이언트를 연결할 수 있습니까?"입니다

서버가 클라이언트를 청취 할 수는 있지만 일단 연결되면 서버를 거래에서 제외하고 클라이언트가 직접 대화 할 수 있습니다.

내 서버가 미국이고 클라이언트 A가 유럽이고 클라이언트 B가 아시아입니다. 클라이언트는 일반 사용자이며 앱을 실행하고 다른 클라이언트와 접촉합니다. 대륙간 피어 - 투 - 피어 연결을 사용하는 팀 뷰어와 비슷한 개념입니다.

다시 한 번 말씀 드리지만 저는 서버에 아무것도 보내지 않으므로 클라이언트간에 딜러가되고 싶지 않습니다. 서버가 항상 새 연결을 청취하고 클라이언트간에 데이터를 전달하는 데 방해가되지 않도록합니다.

도와주세요. 감사합니다

답변

1

나는 클라이언트가 (그 (것)들이 그물에 어떤 전형적인 기계다는 것을 추측 한) 잘 IP 주소가 없다고 생각한다.

2 명의 클라이언트가 말하기 위해서는 그 중 하나가 실제로 서버가되어야합니다. 그러나 NAT 및 방화벽과 같은 기능은 일반적인 컴퓨터가 인터넷상의 다른 컴퓨터에서 사용할 수있는 수신 대기 소켓을 열지 못하게합니다.

문제는 서버가 클라이언트에 다시 연결된 이전 FTP 프로토콜의 '활성'모드와 조금 비슷합니다. 이 모드는 클라이언트의 IP 주소에 대한 서버 아이디어가 클라이언트 개인 네트워크의 NAT 게이트웨이의 IP 주소 일 가능성이 높고 클라이언트의 IP 주소에 대한 아이디어가 비공개가되기 때문에 현대 세계에서는 사용하기가 어렵습니다. 네트워크 IP 주소.

+0

네, 그것에 대해 읽었습니다. 불가능하다고 생각합니다. 그러나 두 고객이 어떻게 가능한 가장 빠른 방법으로 서로 이야기 할 수 있을지 궁금합니다. 방금 서버를 사용한다면 다음 두 가지 옵션이 있습니다. 1 : 연결을 유지하여 사용 가능한 소켓이 부족하게 만듭니다. 2 : 서버에 쿼리를 보냈습니다. 많은 연결을 수락하고 클라이언트를 식별 한 다음 다른 클라이언트의 마지막 상태로 업데이트해야합니다! 둘 다 무겁습니다! – Soley

+0

@Salivan 고객이 기술에 익숙하다면 포트 포워딩을 요구할 수 있습니다. – Kayaman

+0

이 포트 포워딩을 안드로이드, html5 등에서 수행 할 수 있습니까? 또는 뭔가 자바 특정 무엇입니까?클라이언트가 라우터를 변경하거나 상대방의 설정을 변경하여 서로 연결할 수있게하고 싶지 않습니다. – Soley

0

이 실험을 수행하면 http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html이 발견되었습니다.

그런 경우 연결을 유지해도개의 3k 활성 연결이 손상되지 않습니다.

그러나 로컬 테스트에서 클라이언트/서버의 최악의 부분은 요청을 처리하는 데 필요한 시간이라는 것을 알았습니다.

스레딩을 사용하고 있지만, 스레딩은 프로그램의 모든 부분을 동시에 실행할 수있는 가짜 기술입니다. 그것은 프로세스의 병목이며 알고리즘을 최적화해야합니다.

+0

답변 섹션에 포함되지 않아야합니다. 귀하의 관찰에 따라 스스로 질문을 업데이트하십시오. – Prabhu

+0

아 그래,하지만 사람들이 산만해질 까봐 걱정된다. 여기서 내가 언급 한 것은 연결을 유지할 수있는 양입니다. 여기서 가장 중요한 질문은 클라이언트를 어떻게 연결시킬 수 있는지입니다. – Soley

관련 문제