我们希望在两个Android设备之间建立TCP/IP连接。目前,我们认为如果将连接设备与设备进行,则会更简单。因此,没有服务器位于两个手机之间。
大多数情况下(如果不是始终如此),一个设备没有真正的IP地址(NAT等)。这对创建TCP套接字是否构成问题?我没有找到任何确切的信息。任何建议和意见将不胜感激。
谢谢
我们希望在两个Android设备之间建立TCP/IP连接。目前,我们认为如果将连接设备与设备进行,则会更简单。因此,没有服务器位于两个手机之间。
大多数情况下(如果不是始终如此),一个设备没有真正的IP地址(NAT等)。这对创建TCP套接字是否构成问题?我没有找到任何确切的信息。任何建议和意见将不胜感激。
谢谢
如果两个节点都没有全局IP,并且不在同一物理网络中,则无法在没有服务器的情况下通过TCP进行通信,除非您创建一个控制服务器作为中继来告诉节点有关另一侧发生的任何更改。
这是可能的,但你可能会遇到一些问题。首先,你必须知道要联系的主机的公共地址,如果你的两个主机在不同的NAT网络中,你应该使用一些服务器(就像你在SIP电话中所做的那样)。然后,你必须希望被联系的主机在一个“好”的NAT后面,比如“全锥形”或类似的NAT,而不是在一个“坏”的NAT后面,比如“对称”的NAT,它不允许传入连接。事实上,你使用TCP连接而不是UDP数据包可以帮助你,因为有三次握手。事实上,大多数NAT路由器接受传入的TCP连接,但不接受传入的UDP数据包。
一个设备在NAT后面不是问题。要求是:服务器必须能够被客户端访问。
我正在使用Apache Mina来处理TCP连接。它真的让我的生活变得更轻松了。它可以用于客户端和服务器。试一试吧...
要创建一个TCP套接字,必须有一个设备在监听,另一个设备在连接。然而,在现实世界的情况下,你所描述的有点困难。 比如,如果你要在两部手机之间通过蜂窝网络进行通信,我不会感到惊讶,如果网络不允许像那样向一个手机发起入站连接,并将每个手机的IP隔离开来。因此,尽管两部手机可能处于相同的子网IP范围内,它们可能不在同一物理网络上,这使得整个路由问题几乎不可能解决。
如果你控制着网络,并且正在使用Wifi并自己进行IP地址转换,同时两个设备都在你的网络中,那么你应该能够像任何其他客户端服务器TCP套接字一样完成此操作。