C# IPv6套接字适用于Mono控制台应用程序,但不适用于Unity应用程序
我对一些使用套接字的代码有问题。我想通过IPv6连接脚本,但在Unity中运行此脚本时收到SocketException。此代码作为MonoDevelop中的控制台应用程序项目非常有效: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)
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”
如果您感兴趣,这是错误报告: