【问题标题】:Programatically finding IP of MacBook to which iOS device is connected via cable以编程方式查找通过电缆连接 iOS 设备的 MacBook 的 IP
【发布时间】:2017-01-06 11:29:17
【问题描述】:

当 iOS 设备通过 USB 电缆连接到 MacBook 时,是否有任何编程方式让 iOS 设备上运行的应用程序发现 MacBook 的 IP 地址? 这样就可以在 iOS 设备和笔记本电脑上运行的服务器之间建立套接字连接。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    它们之间的 USB 链接上的 IP 地址?我什至不确定是否在所有情况下都有一个,我相信只有在网络共享(个人热点)处于活动状态时才会有一个。

    如果您指的是 Mac 在 Wi-Fi 或以太网上的 IP 地址,则不能保证两台设备实际上都在同一个网络上(您可以将 Mac 在 NAT 后面的本地 LAN 上,而 iPhone 在不同 NAT 后面的移动网络),这会使通信出现问题(然后您会遇到常见的 P2P NAT 穿越问题,而这又需要外部服务器)。

    如果您确实希望设备通过网络(而不是通过 USB 电缆)相互通信,您可能应该查看Bonjour(要求两个设备在同一网络上)或更近的Multipeer connectivity 框架(我相信它甚至可以在需要时设置点对点 Wi-Fi 网络。

    如果您真的想通过电缆进行通信,您可能最好考虑通过libimobiledevice / usbmuxd 与设备通信,这可以提供与 iOS 设备上的端口的通信。但是请注意,AFAIK,这适用于 Mac 上的应用程序与 iOS 设备上的服务器应用程序通信,而不是相反。

    【讨论】:

    • 是的,我的意思是“Wi-Fi 上 Mac 的 IP 地址”。两台设备都在同一个 WiFi 网络上。我想这听起来像你说的那样从 iPhone-> MacBook 上是不可能的。我希望通过 WiFi 连接而不是 USB 电缆进行通信。
    • 您是否需要真正识别通过 USB 电缆连接的 Mac?在这种情况下,让您的应用程序侦听端口,并通过 usbmuxd 与应用程序通信,将其地址发送到应用程序(或您可以通过 Bonjour 查找的名称)。你会找到各种方法来做到这一点here。或者,如果您不在乎哪个服务器,只需使用 Bonjour 来发现服务器。不确定是否有办法识别通过其他方式连接到设备的 Mac。
    【解决方案2】:

    把这个方法放到你的类中,就可以得到当前设备的IP地址了。

    // get the IP address of current-device
    - (NSString *)getIPAddress {
        NSString *address = @"error";
        struct ifaddrs *interfaces = NULL;
        struct ifaddrs *temp_addr = NULL;
        int success = 0;
        // retrieve the current interfaces - returns 0 on success
        success = getifaddrs(&interfaces);
        if (success == 0) {
            // Loop through linked list of interfaces
            temp_addr = interfaces;
            while(temp_addr != NULL) {
                if(temp_addr->ifa_addr->sa_family == AF_INET) {
                    // Check if interface is en0 which is the wifi connection on the iPhone
                    if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
                        // Get NSString from C String
                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                    }
                }
                temp_addr = temp_addr->ifa_next;
            }
        }
        freeifaddrs(interfaces);
        return address;
    }
    

    【讨论】:

    • 我正在 iOS 设备上寻找能够检索 MacBook 的 IP 地址的应用程序。这将获取本地 IP 地址。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2012-12-18
    • 2017-06-28
    相关资源
    最近更新 更多