2015-11-04 5 views
0

У меня возникла довольно странная проблема с Unity 5.2.0f3 64Bits. Когда я создаю свой собственный пользовательский класс для подключения 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.BeginConnect() на client.Connect(), процесс будет висеть там, и когда он не будет выполнен в другом потоке, инфраструктура Unity просто сбрасывает. (Не отвечает)

Я разработал класс сначала на .Net 2012 и смог выполнить его со всеми ожидаемыми результатами (без ошибок).

EDIT:
Когда я создаю и побежал TcpClient.Connect() в MonoBehaviour, то TcpClient подключается к серверу, но это не решение для меня, как много данных, становится возвращается.

Неужели кто-то сталкивался с этим типом проблемы?

ответ

0

Обходным решением для этой проблемы было создание нормального единственного сценария C#, поместившего там весь код клиента.
Unity по-прежнему неисправен, поскольку в первый раз код был скопирован, он не работал, но комментировал/работал в нем (скопированный код RunClient()) ...

Смежные вопросы