TCPClient 不会从自定义连接 class
TCPClient won't connect from custom class
我在 Unity 5.2.0f3 64 位上遇到了一个相当棘手的运行ge 问题。当我为 TcpClient
连接创建自己的自定义 class 时,这个连接永远不会连接。这是我的简单 class:
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)
{
}
}
这是一个自定义 class,它不是从 MonoBehaviour
继承的,因为它的想法是 运行 在不同的线程上。当我执行 Unity 应用程序时,class 实例已正确创建并执行(with/out 线程,它用于相同的行为)。
当进程遇到 client.BeginConnect()
时,AsyncCallback()
被触发,但 client.connected
仍然是 false。
当我用 client.Connect()
替换 client.BeginConnect()
时,进程将挂在那里,当它不在不同的线程中执行时,Unity 框架只是转储。 (没有回应)
我首先在 .Net 2012 上开发了 class 并且可以执行它并获得所有预期结果(无错误)。
编辑:
当我在 MonoBehaviour
中创建 运行 TcpClient.Connect()
时,TcpClient
连接到我的服务器,但这对我来说不是解决方案,因为它有很多数据正在退货。
有人遇到过这类问题吗?
该问题的解决方法是创建一个普通的统一 C# 脚本,将整个客户端代码放在那里。
Unity 仍然有问题,因为第一次复制代码时,它不起作用,但评论 out/in 它起作用了(复制了 RunClient()
的代码)...
我在 Unity 5.2.0f3 64 位上遇到了一个相当棘手的运行ge 问题。当我为 TcpClient
连接创建自己的自定义 class 时,这个连接永远不会连接。这是我的简单 class:
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)
{
}
}
这是一个自定义 class,它不是从 MonoBehaviour
继承的,因为它的想法是 运行 在不同的线程上。当我执行 Unity 应用程序时,class 实例已正确创建并执行(with/out 线程,它用于相同的行为)。
当进程遇到 client.BeginConnect()
时,AsyncCallback()
被触发,但 client.connected
仍然是 false。
当我用 client.Connect()
替换 client.BeginConnect()
时,进程将挂在那里,当它不在不同的线程中执行时,Unity 框架只是转储。 (没有回应)
我首先在 .Net 2012 上开发了 class 并且可以执行它并获得所有预期结果(无错误)。
编辑:
当我在 MonoBehaviour
中创建 运行 TcpClient.Connect()
时,TcpClient
连接到我的服务器,但这对我来说不是解决方案,因为它有很多数据正在退货。
有人遇到过这类问题吗?
该问题的解决方法是创建一个普通的统一 C# 脚本,将整个客户端代码放在那里。
Unity 仍然有问题,因为第一次复制代码时,它不起作用,但评论 out/in 它起作用了(复制了 RunClient()
的代码)...