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网口范围?有人知道吗?的主要内容,如果未能解决你的问题,请参考以下文章