3

抱歉,如果这已张贴在我工作/寻找几天的地方。

问题:

通过对等网络与 android 设备进行通信时,我收到了 SocketTimeoutExceptions。

细节:

发生这种情况时,android 设备使用自己的移动网络而不是 wifi(无论如何,wifi 并不是为使用而设计的)。

android 设备成功地从 whatismyip.com 获取他们的 ipAddress。

一台设备将通过我们使用的对等网络以外的其他方式向另一台设备发送其 IP 地址。

远程设备的ip地址将成功到达本地设备。

当本地设备通过对等网络响应时,会发生 TimeoutException。

我试过的:

将超时延长到相当长的时间段。

使用其他安卓设备。

值得注意的:

应该注意的是,这个相同的点对点网络已经过测试,可以在局域网上的 PC(如果重要,运行 linux 和 windows)之间成功工作。还刚刚在我们的 PC 上通过我们的有线互联网连接测试了对等网络,它确实有效。

我猜:

我认为该设备以某种方式被 isp 隐藏了,我将不得不编写一些代码来执行类似于 nat 遍历的操作,但我不太确定。但话又说回来,如果设备被隐藏,我应该得到一个连接被拒绝的异常。

任何帮助深表感谢。

PS我目前无法发布代码,即使可以,整个过程也需要几千行代码。

4

3 回答 3

2

首先,我对点对点的经验仅是wifi连接,但我相信一些概念也应该适用于3G。

当您收到连接拒绝错误时,表示您的网络数据包已经能够到达其他设备,但该设备拒绝接受连接请求,并且否定的答案到达您的设备。

当您收到连接超时错误时,这意味着您的网络数据包无法到达其他设备,或者其他设备的应答没有到达您的设备。

现在让我们关注第二个错误(连接超时):

调试它的第一步是启动设备以等待连接,然后从具有网络访问权限的 windows 或 linux 机器发出命令:

telnet 设备Ip 端口WaitingForConnection

如果您收到 telnet 屏幕并且没有超时错误,则意味着问题出在您发送请求连接的代码中。

如果您也收到超时错误,则确认您的网络数据包无法到达设备(或答案无法到达您)

现在,什么可能会阻止网络数据包到达设备。该设备可能位于路由器或防火墙后面。

如果设备位于防火墙后面,则需要打开防火墙端口以进行传入连接。

如果设备位于路由器后面(我相信是这种情况,否则您不需要从 whatismyip.com 获取 ip 地址),您需要配置路由器以让侦听端口上的传入请求重定向到本地设备 IP 地址。

如果没有相关代码,我将无能为力。

祝你好运。

于 2012-10-04T23:48:23.830 回答
2

听起来你有 nat 问题。以下是一些绕过它的起点(但我认为您必须切换到 udp):

您当然也可以引入服务器。快乐的黑客:-)

于 2012-10-05T21:43:53.237 回答
1

您应该尝试的是有效地调试您的连接,您可以做的第一件事是检查 isReachable,如android dev中所暗示的那样,即使不幸的是某些网络阻止了 ICMP。

另一个需要注意的重要事情是,即使你使用 3g,你的网络仍然可以使用 NAT 地址,相信我,这很常见,所以你在 whatsmyip 上看到的 ip 也可能是 NATed ip。

我建议的下一步是尝试在混合模式下使用您的应用程序,即一台 pc 和一台 android 设备,并尝试连接到 pc(确保一个具有公共 ip 或至少转发端口),如果你知道的话确定它是您的移动运营商。

如果确实如此,那么除了使用 wifi 或使用本地服务器在两个对等方之间建立连接之外,您无能为力。

还要注意的是,p2p 网络越发展越强大,您还可以实现已经连接到网络并且可以从外部访问的对等方帮助其他人连接到其他对等方。您应该查找 p2p 中继和打孔

于 2012-10-06T12:32:31.803 回答