【问题标题】:IPv6 socket works in Mono console app but not Unity appIPv6 套接字适用于 Mono 控制台应用程序,但不适用于 Unity 应用程序
【发布时间】:2014-09-25 19:23:21
【问题描述】:

我对一些使用套接字的代码有疑问。我想通过 IPv6 连接我的脚本,但是当我在 Unity 中运行此脚本时收到 SocketException。此代码在 MonoDevelop 中完美地作为控制台应用程序项目:

using System;
using System.Net;
using System.Net.Sockets;

namespace socketIPv6
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Socket s;
            s = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
            IPAddress ip = IPAddress.Parse("ff15::2");
            s.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.AddMembership, new IPv6MulticastOption(ip));
            IPEndPoint ipep = new IPEndPoint(IPAddress.IPv6Any, 26000);
            s.Bind(ipep);

            while (true) {
                byte[] b = new byte[1024];
                s.Receive (b);
                string str = System.Text.Encoding.ASCII.GetString (b, 0, b.Length);
                Console.WriteLine (str.Trim ());
            }
        }
    }
}

但是相同的代码(我只将 "Console.WriteLine()" 更改为 "Debug.Log()")不能作为 Unity 项目工作。此代码因异常而中断:"SocketException: An address incompatible with the requested protocol was used." 有人可以帮助我吗?谢谢!

【问题讨论】:

    标签: c# unity3d mono ipv6 socketexception


    【解决方案1】:

    请记住,您从控制台应用程序链接的 Mono 框架的版本可能与 Unity 的 Mono 框架不同。

    这可能部分回答了正在发生的事情:

    用 ILSpy 反编译 Unity\Editor\Data\Mono\lib\mono\2.0\System.dll 在不同的地方显示依赖

    internal static void Socket.CheckProtocolSupport()
    

    其中一项相关检查包括尝试从system.net/settings 部分中读取 .NET 配置文件。如果您查看Unity\Editor\Data\Mono\etc\mono\2.0\machine.config,它有system.net/settings/<ipv6 enabled="false"/>

    所以要么该配置文件不相关或陈旧,要么似乎 Unity 已明确关闭或不支持 IPv6 套接字。

    【讨论】:

      【解决方案2】:

      尝试在播放器设置中使用“.Net 2.0 Subset”api 兼容性。我也在做同样的事情,这是因为我们使用的是完整的“.Net 2.0”

      如果您有兴趣,这是错误报告:https://fogbugz.unity3d.com/default.asp?804510_c5ei44diq6ktnh1u

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多