以编程方式查找通过电缆连接iOS设备的MacBook的IP

时间:2017-01-06 11:29:18

标签: ios objective-c

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

2 个答案:

答案 0 :(得分:2)

它们之间的USB链路上的IP地址?我甚至不确定在所有情况下都有一个,我相信只有当网络共享(个人热点)活跃时才有。

如果您的意思是Wi-Fi或以太网上的Mac的IP地址,那么不能保证两个设备实际上都在同一个网络上(您可以在NAT后面的本地LAN上安装Mac) iPhone位于不同NAT后面的移动网络上,这会使通信出现问题(然后您会遇到通常的P2P NAT遍历问题,而这需要外部服务器)。

如果您真的希望设备通过网络相互通信(而不是通过USB线),您应该查看Bonjour(这需要两个设备在同一网络上)或最近的Multipeer connectivity框架(我相信,它甚至可以在需要时建立点对点Wi-Fi网络。

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

答案 1 :(得分:0)

将此方法放入您的班级&您可以获取当前设备的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;
}