你能有一个没有线程的TCP客户端吗?

本文关键字:TCP 客户端 线程 有一个 | 更新日期: 2023-09-27 17:53:19

通常我不想尝试这个,但我正在制作一个自定义的统一服务器和统一有多线程问题,不允许你使用任何统一功能,并说这必须从主线程调用。所以我的问题是,是否有可能使TCP客户端接收没有线程。

我已经到处找过了,但没能找到其他的选择。

我现在的代码:

//TCP
TCP = new TcpClient (ip, 25001);
stream = TCP.GetStream ();
//TCP thread
TCPrecieve = new Thread (new ThreadStart (TCPRecieve));
TCPrecieve.IsBackground = true;
TCPrecieve.Start ();

public void TCPRecieve () {
        IPEndPoint clientEndPoint = new IPEndPoint (IPAddress.Any, ((IPEndPoint)TCP.Client.LocalEndPoint).Port);
        StreamReader TCPReader = new StreamReader (stream);
        string data = "";
        while ((data = TCPReader.ReadLine()) != null) {
            AnalyseTCP (data);
        }
    }

你能有一个没有线程的TCP客户端吗?

您可以使代码不使用线程:只需删除线程并运行TCPRecieve内联。但我怀疑这是不是你想要的。事实上,你可能希望连接操作也不要发生在主线程上,这样它就不会被阻塞。

拥有多个线程不是问题。当你从不允许的线程访问unity对象时,问题就来了。不要那样做。您可以在后台线程上运行TCP工作。

我不太了解unity,但是你需要编组对主线程的调用。

使用异步IO不能解决这个问题,因为完成回调是在线程池线程上调用的。