Java 连接两个没有服务器的客户端

Java 连接两个没有服务器的客户端,java,sockets,server,connection,client,Java,Sockets,Server,Connection,Client,我知道如何在全球范围内将客户机连接到服务器 如果您想获得训练的快速代码,请选中此链接: 我的问题是“在没有服务器的情况下如何连接两个客户端?” 服务器可能在那里监听客户机,但一旦他们连接,我希望服务器退出交易,然后客户机可以直接对话 我的服务器在美国,客户端A在欧洲,客户端B在亚洲。客户是普通用户,他们只是运行应用程序并与其他客户联系——这是一个类似的概念,就像具有跨大陆点对点连接的team viewer 同样,请注意,我不想向服务器发送任何内容,也不希望它成为客户之间的经销商。它将使服务器始

我知道如何在全球范围内将客户机连接到服务器

如果您想获得训练的快速代码,请选中此链接:

我的问题是“在没有服务器的情况下如何连接两个客户端?”

服务器可能在那里监听客户机,但一旦他们连接,我希望服务器退出交易,然后客户机可以直接对话

我的服务器在美国,客户端A在欧洲,客户端B在亚洲。客户是普通用户,他们只是运行应用程序并与其他客户联系——这是一个类似的概念,就像具有跨大陆点对点连接的team viewer

同样,请注意,我不想向服务器发送任何内容,也不希望它成为客户之间的经销商。它将使服务器始终侦听新连接,并防止服务器忙于在客户端之间传递数据

请帮我做这个。
谢谢

我认为您的问题在于客户端(假设它们是网络上的任何典型机器)没有众所周知的IP地址

要让两个客户机对话,其中一个客户机实际上必须成为服务器。然而,NAT和防火墙之类的东西阻止了一台典型的机器仅仅打开一个可供internet上任何其他机器使用的侦听套接字


您的问题有点像旧FTP协议的“活动”模式,即服务器连接回客户端。这种模式在现代世界很难使用,因为服务器认为客户端的IP地址可能是客户端专用网络NAT网关的IP地址,而客户端认为其IP地址是专用网络IP地址。

我认为您的问题在于客户端(假设它们是网络上的任何典型机器)没有众所周知的IP地址

要让两个客户端通话,其中一个客户端实际上必须成为服务器。然而,NAT和防火墙之类的东西会阻止一台典型的机器仅仅打开一个可供internet上任何其他机器使用的侦听套接字

您的问题有点像旧FTP协议的“活动”模式,服务器连接回客户端。这种模式在现代世界很难使用,因为服务器对客户端IP地址的概念可能是客户端专用网络NAT网关的IP地址,而客户端对其IP地址的概念可能是ess将是一个专用网络IP地址。

我在做一些实验时发现了这一点

如果是这样,那么保持连接不会对我造成伤害,因为我在做一些实验时发现了这一点


如果是这样的话,那么保持连接不会对我造成伤害,因为是的,我读到了,我认为这是不可能的。但是,我想知道两个客户端如何能够以最快的方式相互通信?如果我只使用服务器,那么我有两个选择:1:保持连接,这会使我的可用套接字耗尽,2:每当我想做某件事时,都会向服务器发送查询,比如comet,在这种情况下,我必须接受大量连接并识别客户端,然后用另一个客户端的最后状态进行更新!两者都很重!@Slaven如果你的客户端精通技术,你可以要求他们进行端口转发。我能执行吗android、html5等中的端口转发?还是java特有的?我不希望客户端更改其路由器或更改其端部的任何设置,以便能够相互连接。嗯,我想我无法让我的客户端成为侦听器,服务器必须充当此处的消息分发者。如果其中一个客户端没有落后一个NAT,或者如果它的NAT使用端口转发,它可以充当另一个客户端连接到的侦听器。如果NAT支持uPNP,则可以通过编程配置端口转发。大多数P2P系统使用中央服务器来协调对等方之间的连接创建。更糟糕的情况是,两个客户端都在NAT后面,没有端口转发,因此直接c连接是不可能的,除非,和其他技术被利用。是的,我读过,我认为这是不可能的。但是,我想知道两个客户端如何能够以最快的方式相互交谈?如果我只使用服务器,那么我有两个选项:1:保持连接,这会使我的可用套接字耗尽;2:s每当我想做一些事情时,比如comet,我都要向服务器进行ent查询,在这种情况下,我必须接受大量连接并识别客户端,然后用另一个客户端的最后状态进行更新!两者都很繁重!@Slaven如果你的客户端精通技术,你可以要求他们进行端口转发。我能执行这个操作吗android、html5等中的端口转发?或者它是java特有的吗?我不希望客户端更改其路由器或更改其端部的任何设置,以便能够相互连接。嗯,我想我将无法使我的客户端成为侦听器,服务器必须充当此处的消息分发者。如果其中一个客户端不支持NAT,或者如果其NAT使用端口转发,则它可以充当其他客户端连接到的侦听器。如果NAT支持uPNP,则可以通过编程配置端口转发。大多数P2P系统使用中央服务器来协调对等方之间的连接创建。更糟糕的情况是,两个客户端都在NAT后面,没有端口转发,因此直接连接除非使用了其他技术,否则不可能进行连接。这不应该出现在回答部分。请根据您的观察更新问题本身。啊,是的,但我担心这会分散人们的注意力。我在这里指出的是可以保持的连接数量,我的主要问题是如何保持客户之间的连接。我想想看,最终如果你有一个一次可以接受一个请求的门,那么线程就没用了。顺便说一句,这个问题已经有4年了,还有3年零2天就要解决了