Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IPv6套接字适用于Mono控制台应用程序,但不适用于Unity应用程序_C#_Unity3d_Mono_Ipv6_Socketexception - Fatal编程技术网

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

C# IPv6套接字适用于Mono控制台应用程序,但不适用于Unity应用程序,c#,unity3d,mono,ipv6,socketexception,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)

我对一些使用套接字的代码有问题。我想通过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 ());
            }
        }
    }
}

但是相同的代码(我只为
“Debug.Log()”
)更改了
“Console.WriteLine()”
)不能作为Unity项目使用。此代码因异常而中断:
“SocketException:使用了与请求的协议不兼容的地址。”
有人能帮我吗?谢谢

请记住,您从控制台应用程序链接的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/

因此,该配置文件不相关或过时,或者Unity已关闭或不支持IPv6套接字。

请尝试在播放器设置中使用“.Net 2.0子集”api兼容性。我运行的是同样的东西,因为我们使用的是完整的“.NET2.0”

如果您感兴趣,这是错误报告: