У меня возникла довольно странная проблема с 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
подключается к серверу, но это не решение для меня, как много данных, становится возвращается.
Неужели кто-то сталкивался с этим типом проблемы?