1

我正在尝试在我的 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;

}

4

4 回答 4

5

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

“可达性”反映了应用程序发送到网络堆栈中的数据包是否可以离开本地计算机。请注意,可达性并不能保证数据包会真正被主机接收。

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

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

于 2009-02-17T01:36:49.207 回答
2

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

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

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

于 2009-02-15T19:40:21.087 回答
1

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

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

于 2009-02-12T09:31:10.603 回答
0

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

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

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

于 2009-02-20T13:50:40.777 回答