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