通过程序查找iOS设备通过电缆连接到的MacBook的IP



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

它们之间USB链路上的IP地址?我甚至不确定在所有情况下都有,我相信只有当系留(个人热点)处于活动状态时才会有。

如果你指的是Mac在Wi-Fi或以太网上的IP地址,那么不能保证这两个设备实际上都在同一个网络上(你可以让Mac在NAT后面的本地局域网上,而iPhone在不同NAT后面的移动网络上),这会使通信成问题(然后你会遇到常见的P2P NAT穿越问题,这反过来需要外部服务器)。

如果你真的想让设备通过网络(而不是通过USB电缆)相互通信,你可能应该研究Bonjour(它要求两个设备都在同一个网络上)或更新的多人连接框架(我相信,它甚至可以在需要时建立对等Wi-Fi网络)。

如果你真的想通过电缆进行通信,你最好考虑通过libimobiledevice/usbmuxd与设备通话,它可以通过iOS设备上的端口提供通信。然而,请注意,AFAIK的工作原理是Mac上的应用程序与iOS设备上的服务器应用程序对话,而不是相反。

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

最新更新