ipv6

//////////////////////////////////////////////////

 

 

isIPv4 = SDKInfo.isIPv4;

if(!isIPv4)

server=FromIPv4ToIPv6(server);

 

 

 

            if (socket == null)

            {

if(isIPv4)

                 socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

else

socket = new Socket (AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);

            }

if(isIPv4)

             socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

            if (socket.Connected == true)

            {

                return false;

            }

            // socket.Connect(new IPEndPoint(IPAddress.Parse(server), port));

            //服务器IP地址

            //IPAddress ipAddress = IPAddress.Parse(server);

            //服务器端口

            //IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, port);

 

 

IPAddress ipAddress;

IPEndPoint ipEndpoint;

if (isIPv4)

{

ipAddress = IPAddress.Parse(server);

ipEndpoint = new IPEndPoint(ipAddress, port);  

}  else 

{

IPHostEntry ipHostInfo = Dns.GetHostEntry(server);

ipAddress = ipHostInfo.AddressList[0];

ipEndpoint = new IPEndPoint(ipAddress, port);

}  

 

 

 

 

//////////////////////////////////////////////////

 

 

 

 

public bool isIPv4 = true;

private string FromDecimalToHexa(string strTen)

{

int intTen;

intTen = Convert.ToInt32(strTen);

string strHexa = Convert.ToString(intTen, 16);

if (strHexa.Length <= 1)

strHexa = "0" + strHexa;

return strHexa;

}

private string FromIPv4ToIPv6(string ipv4)

{

if(ipv4.Contains(":"))

return ipv4;

string ipv6;

string[] ip = ipv4.Split('.');

ipv6 = string.Format("64:ff9b::{0}{1}:{2}{3}", FromDecimalToHexa(ip[0]), FromDecimalToHexa(ip[1]), FromDecimalToHexa(ip[2]), FromDecimalToHexa(ip[3]));

return ipv6;  

}

 

 

 

 

//////////////////////////////////////////////////

 

 

public static bool isIPv4 = true;

 

#if UNITY_IPHONE

if (info.Length > 4)       

{

string ip = info[4];

if(ip=="IPv6")

isIPv4=false;

else

isIPv4=true;

}

#endif

 

 

//////////////////////////////////////////////////

 

 

ipv4/ipv6//

 

 

 

 

-(NSString *)CheckIpv4 : (NSDictionary *)dic

{

    if( [[dic allKeys]containsObject:@"en0/ipv6"])

    {

        NSString *ip=dic[@"en0/ipv6"];

        NSArray *array= [ip componentsSeparatedByString:@":"];

        if([[array objectAtIndex:0] isEqual:@"fe80"])

            return @"IPv4";

        else

            return @"IPv6";

    }

    else

        return @"IPv4";

    

}

- (NSDictionary *)getIPAddresses

{

    NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];

    

    // retrieve the current interfaces - returns 0 on success

    struct ifaddrs *interfaces;

    if(!getifaddrs(&interfaces)) {

        // Loop through linked list of interfaces

        struct ifaddrs *interface;

        for(interface=interfaces; interface; interface=interface->ifa_next) {

            if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {

                continue; // deeply nested code harder to read

            }

            const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;

            char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];

            if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {

                NSString *name = [NSString stringWithUTF8String:interface->ifa_name];

                NSString *type;

                if(addr->sin_family == AF_INET) {

                    if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {

                        type = IP_ADDR_IPv4;

                    }

                } else {

                    const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;

                    if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {

                        type = IP_ADDR_IPv6;

                    }

                }

                if(type) {

                    NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];

                    addresses[key] = [NSString stringWithUTF8String:addrBuf];

                }

            }

        }

        // Free memory

        freeifaddrs(interfaces);

    }

    return [addresses count] ? addresses : nil;

}

ipv4/ipv6//

 

 

 

//////////////////////////////////////////////////

 

     NSDictionary *dic= [appInstance getIPAddresses];

    

    NSString *phoneInfo = [NSString stringWithFormat:@"%@~%@~%@~%d~%@", GetModel(), [device systemVersion], cid, GetAvailableMemory()

                           , [appInstance CheckIpv4:dic]];

    

    NSLog(@"dic:    %@",dic);

    NSLog(@"ip:    %@",[appInstance CheckIpv4:dic]);  

 

 

//////////////////////////////////////////////////

 

/

#import <ifaddrs.h>

#import <arpa/inet.h>

#import <net/if.h>

 

#define IOS_CELLULAR    @"pdp_ip0"

#define IOS_WIFI        @"en0"

#define IOS_VPN         @"utun0"

#define IP_ADDR_IPv4    @"ipv4"

#define IP_ADDR_IPv6    @"ipv6"

/

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值