2015-11-04 100 views
0

我在Unity 5.2.0f3 64位上遇到了一個相當奇怪的問題。當我爲TcpClient連接創建自己的自定義類時,此連接永遠不會連接。這是我簡單的類:TCPClient將不會連接自定義類

protected override void StartClient(string mod, string ip) 
{ 
    RunClient(ip, mod); 
} 
private ManualResetEvent connectDone = new ManualResetEvent(false); 
private void connect_done(IAsyncResult ar) 
{ 
    connectDone.Set(); 
} 

private void RunClient(string ip_host_name, string mode) 
{ 
    try 
    { 
     TcpClient client = new TcpClient(); 

     client.BeginConnect(IPAddress.Parse(ip_host_name), 6666, new AsyncCallback(connect_done), client); 
     connectDone.WaitOne(); 
     //Console.WriteLine("Connected"); 
     SslStream lv_ssl_stream = new SslStream(client.GetStream(), false, 
              new RemoteCertificateValidationCallback(ValidateServerCertificate), null); 

     if (authenticate_server(lv_ssl_stream, client)) 
     { 

     } 
     else 
     { 
      // Console.WriteLine("\nCouldn't authenticate the server"); 
     } 

     client.Close(); 
    } 
    catch (Exception e) 
    { 
    } 
} 

這是不從MonoBehaviour繼承,因爲當時的想法是它在不同的線程運行一個自定義類。當我執行Unity應用程序時,類實例被正確地創建並執行(使用/ out Thread,它的行爲都是相同的)。

當進程遇到client.BeginConnect()AsyncCallback()被解僱,但client.connected仍然是錯誤的。
當我用client.Connect()替換client.BeginConnect()時,進程將掛在那裏,當它不在另一個線程中執行時,Unity框架只會轉儲。 (Not Responding)

我在.Net 2012上開發了這個類,並且可以用所有預期的結果(無錯)執行它。

編輯:
當我創建並運行在MonoBehaviourTcpClient.Connect(),在TcpClient被連接到我的服務器,但它的很多數據中的哪一個被退回,這不是我一個解決方案。

有人遇到過這種類型的問題嗎?

回答

0

針對該問題的解決方法是創建一個正常的統一C#腳本,放置整個客戶端代碼。
Unity仍然是越野車,因爲第一次代碼被複制,它沒有工作,但註釋/它在工作(複製代碼RunClient())...