IPv6套接字适用于Mono控制台应用,但不适用于Unity应用

时间:2014-09-25 19:23:22

标签: c# unity3d mono ipv6 socketexception

我遇到一些使用套接字的代码问题。我想通过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()"的{​​{1}})不能用作Unity项目。此代码中断了例外:"Debug.Log()"有人可以帮助我吗?谢谢!

2 个答案:

答案 0 :(得分:3)

请注意,您从控制台应用中链接的Mono框架版本可能与Unity的单声道框架不同。

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

使用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套接字。

答案 1 :(得分:0)

尝试使用&#34; .Net 2.0子集&#34;播放器设置中的api兼容性。我正在运行同样的事情,因为我们使用了完整的&#34; .Net 2.0&#34;

如果您有兴趣,可以使用以下错误报告:https://fogbugz.unity3d.com/default.asp?804510_c5ei44diq6ktnh1u