首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS IPv6应用商店拒绝

iOS IPv6应用商店拒绝
EN

Stack Overflow用户
提问于 2016-07-27 19:17:53
回答 3查看 2.4K关注 0票数 2

我们一直在构建一个关于客户端服务器应用的iOS应用程序。我们在使用Xamarin的iOS应用程序中使用了一个SQL连接和WCF服务。

SQL连接代码:

代码语言:javascript
复制
    String ips = "10.0.0.1" ; //Example.
  SqlConnection con =   new SqlConnection(@"Data Source=" + ips + "; initial Catalog="x";user id =y;password = z;");

苹果决定只在iOS9上使用iOS9,因此他们发布了一份关于ipv6兼容性- IPv6文档的文档。

Xamarin也发表了一篇关于此的博客文章- 准备好iOS应用程序IPv6

我看了所有这些文件,但我无法摆脱这个“拒绝商店”的问题。

我想向你们展示我最后的调度:(ipv4 to ipv6)

代码语言:javascript
复制
string input = "10.0.0.1";
            string ips = "";
            IPAddress address;
            if (IPAddress.TryParse(deviceIP, out address))
            {
                switch (address.AddressFamily)
                {
                    case System.Net.Sockets.AddressFamily.InterNetwork:
                        // we have IPv4
                        ips = input;
                        break;
                    case System.Net.Sockets.AddressFamily.InterNetworkV6:
                        // we have IPv6
                        IPAddress ip = IPAddress.Parse(input).MapToIPv6();
                        ips = "[" + ip.ToString() + "]";
                        break;
                    default:
                        //
                        break;
                }
            }

我使用了MapToIPv6()函数,就像在Xamarin博客文章中描述的那样,但是我的应用程序再次被苹果拒绝。

我们的应用程序在IPv4上运行得很好(苹果也这么说)。当苹果工程师关闭ipv4,只使用ipv6时,我们的应用程序无法到达主机。

请帮我解决这个问题。

平台:在Windows 10 +上使用Xamarin的Visual 2015

服务器:仅在IPv4上。

EN

回答 3

Stack Overflow用户

发布于 2016-07-27 19:44:34

注释中已经有一些有用的内容,但我认为您的主要问题是,您的IPv4到IPv6映射正好相反。您将IPv4地址保持原样,并将IPv6地址映射到已经存在的IPv6。

请看一下固定版本:

代码语言:javascript
复制
string input = "10.0.0.0";
string ips = "";
IPAddress address;
if (IPAddress.TryParse(input, out address))
{
    switch (address.AddressFamily)
    {
        case System.Net.Sockets.AddressFamily.InterNetwork:
            // we have IPv4, map it to IPv6
            IPAddress ip = IPAddress.Parse(input).MapToIPv6();
            ips = ip.ToString();
            break;
        case System.Net.Sockets.AddressFamily.InterNetworkV6:
            // we have IPv6, leave it as is
            ips = input;
            break;
    }
}

为了自己看一看,您可以看看参考源。从这里可以看到,在您的示例中,AddressFamilyInterNetworkV6,所以MapToIPv6方法只是返回IPAddress,没有变化,因为没有什么需要更改的。

代码语言:javascript
复制
public IPAddress MapToIPv6()
{
    if (AddressFamily == AddressFamily.InterNetworkV6)
    {
        return this;
    }

    // ...
}
票数 3
EN

Stack Overflow用户

发布于 2018-02-07 09:43:34

将您的服务器IP: 10.0.0.0更改为域名,例如db.test.com,这是苹果推荐的方法。

代码语言:javascript
复制
string input = "db.test.com";
IPAddress[] ads = Dns.GetHostAddresses (input);
string ips = ads[0];
票数 2
EN

Stack Overflow用户

发布于 2016-12-19 03:06:20

它解决了吗?您不应该关心设备的AddressFamily,而应该只关心远程ip AddressFamily。IPAddress ip = IPAddress.Parse(input); Socket s = new Socket (ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);,我用了它,它起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38621427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档