2014-09-25 35 views
1

我使用套接字的某些代码存在问题。我想通过IPv6连接我的脚本,但在Unity中运行此脚本时收到一个SocketException。此代码工作完全作为一个控制台应用程序项目的MonoDevelop:IPv6套接字在Mono控制台应用程序中可用,但不适用于Unity应用程序

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()")不作为统一的项目工作。此代码打破了例外:"SocketException: An address incompatible with the requested protocol was used."有人可以帮助我吗?谢谢!

回答

3

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

这可能部分地回答这是怎么回事:

反编译Unity\Editor\Data\Mono\lib\mono\2.0\System.dll与ILSpy显示了在不同的地方上

internal static void Socket.CheckProtocolSupport() 

依赖它,在其中的一个其他相关检查中,尝试从.NET阅读配置文件从部分system.net/settings。如果你看看Unity\Editor\Data\Mono\etc\mono\2.0\machine.config它有system.net/settings/<ipv6 enabled="false"/>

因此,无论该配置文件是不相关还是陈旧,或者它出现在Unity专门关闭或不支持IPv6套接字。

相关问题