我遇到一些使用套接字的代码问题。我想通过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()"
有人可以帮助我吗?谢谢!
答案 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