iPhone EDGE/3G网口范围?有人知道吗?

Posted

技术标签:

【中文标题】iPhone EDGE/3G网口范围?有人知道吗?【英文标题】:iPhone EDGE/3G network port range? Anybody know? 【发布时间】:2009-02-11 23:08:26 【问题描述】:

我正在尝试在我的 iPhone 应用程序中访问 61616,并且 SCReachability 代码表明我有一个有效的网络,但我尝试写入 61616 时超时。有谁知道:

A.如果 iPhone EDGE/3G 网络的端口范围有限或不允许连接到此端口?

B.我如何明确检查对该端口的访问。这是我的“网络可达”代码(借用自 Apple 的示例),它检查“foo.bar.com”,但没有显示如何检查“foo.bar.com:61616”。

感谢任何帮助!

- (BOOL)isDataSourceAvailable
static BOOL checkNetwork = YES;
BOOL _isDataSourceAvailable = NO;
if (checkNetwork)  // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
    checkNetwork = NO;

    Boolean success;    
    const char *host_name = "foo.bar.com";

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
    CFRelease(reachability);

return _isDataSourceAvailable;

【问题讨论】:

【参考方案1】:

SCNetworkReachability API 仅检查地址是否可以路由到。引用文档:

“可达性”反映了一个数据是否 数据包,由应用程序发送到 网络栈,可以离开本地 电脑。请注意,可达性确实 不保证数据包 实际上会被宿主接收到。

这与 NAT 或端口限制无关。路由基于地址而不是端口。因此,您(通过 SCNetworkReachability API)所能找到的只是您是否可以(理论上)到达机器的界面。它不会尝试在某个端口上建立连接。

因此,为了确定该服务是否可用,您必须自己尝试测试。最好是当 SCNetworkReachability API 告诉您可以建立连接时。只需尝试连接到端口 61616 上的服务器,看看您是否获得连接或超时。正确的超时值和处理在这里至关重要。

【讨论】:

【参考方案2】:

这不仅因承运人而异,而且因合同而异。例如,在英国,O2 仅将互联网访问限制为现收现付客户的网址(大概是端口 80 和 443,但我没有检查),但允许或多或少的免费访问合同。 (我希望它对 iPhone PAYG 客户更加开放。)

我认为这样做的实际结果是,您不能假设可以访问世界各地的高端口。

我不确定是否有一种简单的方法可以检查特定端口是否打开,您最好的选择可能是使用“合理的”超时。当然,有很多原因可能会导致超时,因此您的错误必须是适当的模糊。

【讨论】:

【参考方案3】:

如果您的 iPhone 通过 EDGE/Mobile 连接,它可能位于 NAT 网关后面,因此您无法联系到它。至少 T-Mobile Germany 就是这种情况。 iPhone 通过 T-Mobile (172.16.x.x) 获取 RFC IP 地址。

我会在 iPhone 连接到本地 WiFi 网络的情况下对其进行测试,如果可能的话,通常会设计应用程序,让 iPhone 联系服务器,然后服务器可以与手机通信。

【讨论】:

【参考方案4】:

您是否尝试从外部机器联系您的 iPhone?

这可能行不通。通常,GPRS/EDGE/UMTS 基础设施会阻止传入连接。否则,移动用户可能会为他没有请求的不需要的流量付费。 (想象一下有人在接下来的六周内每秒 ping 你的 iPhone 一次。你会为此付出代价的......)

解决方案是建立从移动设备到远程机器的连接,然后让远程机器将其用于流量。

【讨论】:

以上是关于iPhone EDGE/3G网口范围?有人知道吗?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 范围滑块

调查:iPhone 换电池有用吗?

linux内核移植,DM9000网卡驱动的移植,ARM开发板和电脑之间无法ping通,不知道啥原因,有人能解决吗?

iPhone 定位精度会超出职责范围吗?

iPhone 定位按钮

在应用程序中禁用iphone主页按钮,可以吗?