2014-09-25 41 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套接字。

相關問題