【问题标题】:CocoaAsyncTask can't connect real deviceCocoaAsyncTask 无法连接真实设备
【发布时间】:2012-04-26 22:54:18
【问题描述】:

我正在使用 CocoaAsyncTask 并尝试连接到本地主机。 当我从模拟器运行它时,它可以工作(我正在使用提供的回显服务器检查它) 但是当我在实际设备上运行它时,什么也没有发生.. 代码是:

if(![socket connectToHost:@"localhost" onPort:8080 error:nil]) {
    NSLog(@"Error..");
}
-(void)socket:(GCDAsyncSocket *)socket didConnectToHost:(NSString *)host: port:(uint16_t)port {
    NSLog(@"Connected");
}

有什么想法吗? 谢谢!

【问题讨论】:

  • 您希望 iOS 设备本身在端口 8080 上提供什么服务?
  • 端口本身并不重要。我也尝试使用 4444。目前只是发送字符串。它适用于模拟器。不是来自设备
  • 所以你在非越狱设备上同时运行服务器和客户端,对吗?
  • 不,服务器在Macbook(或PC,都试过),客户端是iphone
  • 好吧,在这种情况下,“localhost”就不行了。您需要提供 MacBook(或 PC)的 IP 地址。

标签: objective-c ios tcp cocoaasyncsocket


【解决方案1】:

当您尝试连接到未在本地安装的服务器(本地 = 在完全相同的主机和接口上)时,您提供的地址为“localhost”。 请参阅wikipedia entry on "localhost"

它可以在模拟器上运行,因为它使用 Mac 的网络接口,因此“localhost”指的是您运行服务器的机器以及客户端。

您需要提供主机(例如您的 Mac)的本地 IP 地址。通常这类似于 192.168.1.100 或 192.168.0.100 - 但更准确地说是;

192.168.xxx.xxx = C 类不可路由地址

10.xxx.xxx.xxx = A 类不可路由地址

xxx 代表 0 到 255 之间的任何值。

要了解您的本地 IP 地址,请使用系统偏好设置 -> 网络面板。检查 Status 下面的值 "...IP 地址 xxx.xxx.xxx.xxx"

【讨论】:

  • 我试过了。也没有用..我从 www.whatismyip.com 检查了我的 ip 以验证
  • 您尝试了一个非本地地址,但如果您位于带防火墙的路由器后面,则无法访问您的 Mac。在防火墙上打开该端口或使用本地地址。
  • 我明天会试一试。如果我想使用非本地地址(从本地网络外部进行测试),我需要使用从 www.whatismyip.com(或 ipconfig..)获得的地址进行测试并打开路由器中的端口?就这样?
  • 先尝试使用本地路由(本地IP地址)。然后,如果按预期工作,请继续并确保所选端口可远程访问。有关该问题的更多信息,请参阅路由器/防火墙的文档。
  • 谢谢。我明天试试!非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多