点击进入结构如下:

struct sockaddr_in {

__uint8_t sin_len;

sa_family_t sin_family;

in_port_t sin_port;

struct in_addr sin_addr;

char sin_zero[8];

};

sin_family指代协议族,在socket编程中只能是AF_INET

sin_port存储端口号(使用网络字节顺序)

sin_addr存储IP地址,使用in_addr这个数据结构

sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节

addr.sin_len=sizeof(addr);//socket字节长度  

sockaddr_in 结构体:struct sockaddr_in中的in 表示internet,就是网络地址,这只是我们比较常用的地址结构,属于AF_INET地址族,他非常的常用

sin_zero 初始值应该使用函数 bzero() 来全部置零。

一般采用下面语句

struct sockaddr_in cliaddr; bzero(&cliaddr,sizeof(cliaddr)); 

sockaddr_in结构体变量的基本配置

struct sockaddr_in ina;

bzero(&ina,sizeof(ina));

ina.sin_family=AF_INET;

ina.sin_port=htons(23);

ina.sin_addr.s_addr = inet_addr("132.241.5.10");

一:创建测试网络引用

(1)SCNetworkReachabilityRef       SCNetworkReachabilityCreateWithAddress (     //根据传入的地址创建网络连接引用
    CFAllocatorRef allocator,                        //可以为NULL或kCFAllocatorDefault
    const struct sockaddr *address  //需要测试连接的IP地址

);

SCNetworkReachabilityFlags:保存返回的测试连接状态

 //获得连接的标志,是否能连接BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
// 用来获得测试连接的状态,第一参数为之前建立的测试连接引用,第二参数用来保存获得的状态,如果获得状态则返回TRUE, 否则返回FALSE
其中常用的状态有:
kSCNetworkReachabilityFlagsReachable:能够连接网络
kSCNetworkReachabilityFlagsConnectionRequired:能够连接网络,但是首先得建立连接过程
kSCNetworkReachabilityFlagsIsWWAN:判断是否通过蜂窝网覆盖的连接,比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接。

主要常量如下:

Network Reachability Flags:

Flags that indicate the reachability of a network node name or address, including whether a connction is required, and whether some user intervention might by required when eatablishing a connection.

标识(Flags)代表对一个域名(网络结点)或者地址(IP)的可连接性, 其包括是否需要一个网络连接以及在建立网络连接的过程中是否需要用户干预。

kSCNetworkReachabilityFlagsIsWWAN :
The specified node name or address can be reached via a cellular connection, such ad EDGE or GPRS.
通过EDGE(2G到3G的过渡技术方案,这里可以理解为3G)或者GPRS(2G)连接到指定域名或地址。

kSCNetworkReachabilityFlagsReachable :
The specified node name or address can be reached using the current network configuration.
通过当前的网络配置可连接到指定的域名和地址。

kSCNetworkReachabilityFlagsTransientConnection :
The specified node name or address can be reached via a transient connection, such as PPP.
通过一个短暂的(网络)连接可以到达指定的域名或地址,比如PPP(Point to Point Protocol)协议。

kSCNetworkReachabilityFlagsConnectionRequired :
The specified node name or address can be reached using the current network configuration, but a connection must first be
established. If this flag is set, the kSCNetworkReachabilityFlagsConnectionOnTraffic flag, kSCNetworkReachabilityFlagsConnectionOnDemand flag, or kSCNetworkReachabilityFlagsIsWWAN flag is also typically set to indicate the type of connection required. If the user must manually make the connection, the kSCNetworkReachabilityFlagsInterventionRequired flag is also set.可通过当前的网络配置连接到指定的域名或地址,但首先必须建立一个网络连接。如果此标识(kSCNetworkReachabilityFlagsConnectionRequired)被设定,那么标识kSCNetworkReachabilityFlagsConnectionOnTraffic, kSCNetworkReachabilityFlagsConnectionOnDemand或者kSCNetworkabilityFlagsIsWWAN通常应被设定为指定的网络连接要求类型。如果用户必须手动生成此连接, 那么kSCNetworkReachabilityFlagsInterventionRequired标识也应要设定。

kSCNetworkReachabilityFlagsConnectionOnTraffic :
The specified node name or address can be reached using the current network configuration, but a connection must first be established.
Any traffic directed to the specified name or address will initiate the connection.可通过当前网络配置连接到指定的域名或地址,但首先必须建立一个网络连接,任何到达指定域名或地址的连接都将始于此连接。

kSCNetworkReachabilityFlagsInterventionRequired :
The specified node name or address can be reached using the current network configuration, but a connection must first be established.可通过当前网络配置连接到指定的域名或地址,但首先必须建立一个网络连接。

kSCNetworkReachabilityFlagsConnectioniOnDemand :
The specified node name or address can be reached using using the current network configuration, but a connection must first be established. The connection will be established "On Demand" by the CFSocketStream programming interface (see CFStream Socket Additions for information on this). Other functions will not establish the connection.

可通过当前网络配置连接到指定的域名或地址,但首先必须建立一个网络连接。连接必须通过CFSocketSteam编程接口建立,其它函数将无法建立此连接。<br><br>
kSCNetworkReachabilityFlagsIsLocalAddress :
The specified node name or address is one that is associated with a network interface on the current system.指定的域名或地址与当前系统的网络接口相关(即本地的网络地址)。

kSCNetworkReachabilityFlagsIsDirect :
Network traffic to the specified node name or address will not go through a gateway, but is routed directly to one of the interface in the system.网络流量将不通过网关,而会直接的导向系统中的接口。

#import "WebAccessCheck.h"

#import <sys/socket.h>

#import <netinet/in.h>

#import <SystemConfiguration/SystemConfiguration.h>

@implementation WebAccessCheck

+(BOOL)checkNetworkCondition {

struct sockaddr_in zeroAddress;

bzero(&zeroAddress, sizeof(zeroAddress));

zeroAddress.sin_len = sizeof(zeroAddress);

zeroAddress.sin_family = AF_INET;

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);

if(reachability != NULL) {

SCNetworkReachabilityFlags flags;

if (SCNetworkReachabilityGetFlags(reachability, &flags)) {

if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)

{

return NO;

}

if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)

{

return YES;

}

if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||

(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))

{

if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)

{

return YES;

}

}

if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)

{

return YES;

}

}

}

return NO;

}

@end

sockaddr_in结构体相关推荐

  1. socket编程--sockaddr_in结构体操作

    sockaddr结构体 sockaddr的缺陷: struct sockaddr是一个通用地址结构,这是为了统一地址结构的表示方法,统一接口函数,使不同的地址结构可以被bind(),connect() ...

  2. c语言sockaddr_in结构体,转:sockaddr与sockaddr_in结构体详细讲解

    sockaddr与sockaddr_in结构体详细讲解 二者区别 struct sockaddr { unsigned short sa_family;     /* address family, ...

  3. linux sockaddr结构体,linux网络编程笔记 sockaddr_in结构体[转]

    struct sockaddr { unsigned short sa_family; char sa_data[14]; }; 此数据结构用做bind.connect.recvfrom.sendto ...

  4. sockaddr_in 结构体

    strcut sockaddr 是用来描述 IPv4 地址协议,原始结构体 sockaddr 已经被废弃掉了. 常使用 strcut sockaddr_in 类型. struct sockaddr_i ...

  5. sockaddr与sockaddr_in结构体简介

    struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 byte ...

  6. sockaddr_in结构体的说明(成员:sin_family、sin_addr、sin_zero)

    sockaddr_in是系统封装的一个结构体,具体包含了成员变量:sin_family.sin_addr.sin_zero 这个结构体被封装在ws2def.h中,具体的代码如下: typedef st ...

  7. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in {uint8_t sinlen;(4个字节)sa_family_t sin_family;(4个字节)in_port_t sin_port ...

  8. (摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    struct sockaddr { unsigned short sa_family;     /* address family, AF_xxx */ char sa_data[14];       ...

  9. sockaddr,sockaddr_in,sockaddr_un结构体详细讲解

    struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes ...

最新文章

  1. python学习笔记 --- print (输出到文件 file)
  2. 手机版网页设计注意事项
  3. ICCV 2021 | 通过显式寻找物体的extremity区域加快DETR的收敛
  4. boost install on prinse 12.04 ubuntu
  5. javascript常用内置对象总结(重要)
  6. DataReader类访问字段的值
  7. 势逼 React Native,跨平台开发框架 Flutter 很凶猛
  8. FastDFS单机搭建以及java客户端Demo
  9. delphi windows编程_他曾创造多门编程语言,还被比尔盖茨以300万美元挖角
  10. seriespandas索引操作练习
  11. c语言房屋中介系统,ZX房屋中介管理系统(毕设)源码
  12. Vs2008调试慢的问题
  13. 支付宝信用贷豪掷38亿抢客,微粒贷不怂
  14. 蓝桥杯真题——猜年龄python讲解
  15. NRF52840 SOC 在空气净化市场应用的发展趋势
  16. 宋叔日记--新手级别入门全能赚钱软件!
  17. 操作系统-------OS概述
  18. Android布局优化之merge标签
  19. ALM系统介绍(三)
  20. 人脸识别“SphereFace: Deep Hypersphere Embedding for Face Recognition”

热门文章

  1. 如何快速接手一个 Java 项目
  2. 字符标签转数字编码、独热编码 及独热编码转数字编码
  3. (linux自学笔记)linux系统初体验与编程基础
  4. 企业OA移动办公为何首选手机APP?
  5. 沙龙报名 | 数据存储与微服务架构实践,6月15日上海
  6. [5G][NR]基本概念 SCS,RB,CRB,PointA
  7. SAP SD 基础知识之行项目类别(Item Category)
  8. TensorFlow tf.keras.losses.SparseCategoricalCrossentropy 、 categorical_crossentropy
  9. 【愚公系列】2022年01月 Django商城项目 24-商品列表页功能实现
  10. Python爬取QQ好友空间说说