2015-11-04 63 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())...