2016-09-23 5 views
1

Ich weiß, wie man einen Client mit einem Server verbindet, weltweit!Verbinden Sie zwei Clients ohne Server

Check diesen Link, wenn Sie einen schnellen Code zum Training haben wollen: http://cs.lmu.edu/~ray/notes/javanetexamples/

Meine Frage ist: „Wie kann ich zwei Clients ohne Verbindung mit dem Server?“

Der Server kann da sein, um Clients zu hören, aber sobald sie verbunden sind, möchte ich den Server aus dem Geschäft heraus und dann können Clients direkt sprechen.

Mein Server ist in den USA, Kunde A ist in Europa und Kunde B ist in Asien. Clients sind regelmäßige Benutzer und führen die App nur aus und kontaktieren andere Clients. Es ist ein ähnliches Konzept wie Team-Viewer mit der interkontinentalen Peer-to-Peer-Verbindung.

Wieder, bitte beachten Sie, dass ich nichts an den Server senden möchte und ich möchte nicht, dass es der Händler zwischen den Clients ist. Dadurch bleibt der Server immer auf neue Verbindungen und verhindert, dass Daten zwischen Clients ausgetauscht werden.

Bitte helfen Sie mir dabei. Danke

Antwort

1

Ich denke, dass Ihr Problem sein wird, dass Clients (vorausgesetzt, sie sind keine typischen Maschine im Netz) haben keine bekannten IP-Adressen.

Für zwei Clients zu sprechen, muss einer von ihnen tatsächlich ein Server werden. Dinge wie NAT und Firewalls verhindern jedoch, dass ein typischer Computer nur einen Abhörsockel öffnet, der für andere Computer im Internet verfügbar ist.

Ihr Problem ist ein wenig wie der 'aktive' Modus des alten FTP-Protokolls, wo der Server wieder mit dem Client verbunden ist. Dieser Modus ist in der modernen Welt schwierig zu verwenden, da die Server-Idee der IP-Adresse des Clients wahrscheinlich die IP-Adresse des NAT-Gateways des privaten Netzwerks des Clients ist und die Idee der IP-Adresse des Clients privat ist Netzwerk-IP-Adresse.

+0

Ja, ich habe darüber gelesen, und ich denke, es wird nicht möglich sein. Ich frage mich jedoch, wie zwei Kunden auf dem schnellsten Weg miteinander reden können? Wenn ich nur den Server benutze, dann habe ich zwei Möglichkeiten: 1: halte die Verbindungen am Leben, die mir die verfügbaren Sockets ausgehen lassen, 2: gesendete Abfrage an den Server, wann immer ich etwas tun will, wie Kometen, was in diesem Fall Ich muss viele Verbindungen akzeptieren und den Client identifizieren und dann mit dem letzten Status des anderen Clients aktualisieren! Beide sind schwer! – Soley

+0

@Salivan Wenn Ihre Kunden technisch versiert sind, können Sie sie nur zur Portweiterleitung auffordern. – Kayaman

+0

Kann ich diese Portweiterleitung in android, html5 usw. durchführen? oder ist es etwas spezifisch für Java?Ich möchte nicht, dass die Clients ihre Router ändern oder irgendwelche Einstellungen an ihren Enden ändern, um sich miteinander verbinden zu können. – Soley

0

Ich fand diese http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html einige Experimente.

Wenn das der Fall ist, dann behalte ich die Verbindungen für mich nicht < 3k aktive Verbindungen.

jedoch, was ich in meinen lokalen Tests gefunden habe, ist, dass der schlimmste Teil von Client/Server die Zeit ist, die es benötigt, um die Anfragen zu bearbeiten.

Obwohl ich Threading verwende, aber wir alle wissen, dass Threading ist eine Fälschung, um alle Teile des Programms gleichzeitig ausführen zu lassen. Es ist der Engpass des Prozesses und ich muss den Algorithmus für diesen Teil optimieren.

+0

Dies sollte nicht im Antwortabschnitt sein. Bitte aktualisieren Sie die Frage selbst mit Ihrer Beobachtung. – Prabhu

+0

ah ja, aber ich fürchte, es wird die Leute ablenken. Was ich hier notiert habe, ist die Anzahl der Verbindungen, die am Leben erhalten werden können, wobei meine Hauptfrage war, wie ich die Clients verbunden halten konnte. – Soley

Verwandte Themen