03-WIFI通讯获取Wifi名称及ip地址

原创 2017年08月13日 23:33:47
  • 在上一小节中,笔者在介绍wifi通讯流程中介绍到,wifi通讯的本质就是由路由器(wifi芯片)担任局域网服务器来实现多个客户端之间的数据转发,所以第一步我们的服务器需要去监听局域网内的端口号,而要想实现这一过程我们首先需要做两件事

    • 1.检测客户端(手机)有没有连接wifi,如果没有连接wifi的话,是不能够实现通讯的
    • 2.需要获取服务端(服务器)在局域网内的ip地址,因为如果不知道服务器的ip地址,我们的客户端是无法连接服务器的
  • 本小节主要介绍一下iOS如何去获取本机的wifi名称及ip地址


1.1-获取本机wifi名称及mac地址

  • 1。导入系统配置框架

//系统配置框架(网络配置也在该框架中)
#import <SystemConfiguration/CaptiveNetwork.h>

  • 2.代码获取

  • 只对真机wifi连接有效,如果是模拟器和真机4G网络则都为nil


//只对真机wifi连接有效,如果是模拟器和真机4G网络则都为nil
+(NSString *)currentWifiSSID
{
    //1.获取网络底层监视的所有接口列表,返回的是一个BSD接口名称
    NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();
    
    id info = nil;
    for (NSString *ifnam in ifs) {
        
        //2.通过BSD接口名称获取网络信息,返回的是一个字典。其中包含 1.wifi名称字符串  2.mac地址 3.wifi名称二进制数据
        info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        if (info && [info count]) {
            break;
        }
    }
    
    //3.获取字典
    NSDictionary *dctySSID = (NSDictionary *)info;
    
    //4.字典的SSID键对应的值就是wifi的名称
    //注意:  1. 模拟器获取不到wifi名称 返回为nil  2.真机的话如果没有连接wifi而是使用4G,返回的也是nil
    NSString *ssid = [dctySSID objectForKey:@"SSID"];//wifi名称
    
//     NSString *bssid = [dctySSID objectForKey:@"BSSID"];//路由mac地址
    
    return ssid;
    
}

1.2-获取本机在当前wift路由器中的ip地址

  • 1.导入框架


#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#include <ifaddrs.h>
#import <dlfcn.h>

  • 2.代码获取

//获取本机在当前wifi中的ip地址,模拟器真机均可获取
+(NSString *)localWiFiIPAddress
{
    BOOL success;
    struct ifaddrs * addrs;
    const struct ifaddrs * cursor;
    
    success = getifaddrs(&addrs) == 0;
    if (success) {
        cursor = addrs;
        while (cursor != NULL) {
            // the second test keeps from picking up the loopback address
            if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0)
            {
                NSString *name = [NSString stringWithUTF8String:cursor->ifa_name];
                if ([name isEqualToString:@"en0"])  // Wi-Fi adapter
                    return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)];
            }
            cursor = cursor->ifa_next;
        }
        freeifaddrs(addrs);
    }
    return nil;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

同wifi环境下android设备自动获取socket服务端的ip地址和端口号的方法-UDP广播

一、最近做项目,需要使用socket做一个常连接,实现实时通信,但是需求是在同一个wifi环境下,ip地址是动态获取的,这样就造成了服务端地址的不确定性。解决这个问题的关键就是如何拿到服务端的Ip。我...

[转载]iOS 获取WIFI,IP地址

[转载]iOS 获取WIFI,IP地址,  (2014-07-21 15:49:46) 原文地址:获取WIFI,IP地址," style="text-decoration:none; color:r...

wifi无法获取ip地址的解决方法

最近家里的wifi突然不好用了,经常连不上,手机显示正在获取ip,电脑显示无internet访问。重启路由就可以链接设备,但是过一会就又无法连接新设备了。在网上搜了很多方法,也电话了TP-Link的技...

Wifi获取ip地址 (详解)

WifiManager wifiManager = (WifiManager) this .getSystemService(Context.WIFI_SERVICE); if (wifi...

Rt3070芯片动态获取IP地址——station模式(WIFI模块)

Rt3070芯片动态获取IP地址——station模式(WIFI模块)   主机操作系统:Centos 6.7 交叉编译器环境:arm-linux-gcc-4.5.4  开发板平台: FL24...
  • L_x_b
  • L_x_b
  • 2016年08月06日 09:53
  • 510

android开发 获取WIFI和有线的IP地址

/** * if (intf.getName().toLowerCase().equals("eth0") || intf.getName().toLowerCase().equals("wlan0"...

iOS 获取WIFI,IP地址

一获取mac地址:#include // Per msqr #include #include #include - (NSString *) macaddress { int ...

获取当前设备的局域网以及链接的WiFi分配的IP地址

#pragma mark - 获取设备当前连接的局域网的名称(获取不到返回nil) /**  *  @author zm  *  *  @brief  获取设备当前连接的局域网的名称(获取不到返回n...

android 获取ip地址,获取2,3,4g,wifi状态等

1.获取ip地址 public String getLocalIpAddress() { if(((ConnectivityManager) this.getSystemSer...

Android获取WIFI状态下的IP地址以及MAC地址

Android获取WIFI下的IP地址以及MAC地址 代码片段一: WifiManager wifiMan = (WifiManager) getSystemService(Context...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:03-WIFI通讯获取Wifi名称及ip地址
举报原因:
原因补充:

(最多只允许输入30个字)