Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能拥有一个没有线程的TCP客户端吗_C#_Multithreading_Tcp - Fatal编程技术网

C# 你能拥有一个没有线程的TCP客户端吗

C# 你能拥有一个没有线程的TCP客户端吗,c#,multithreading,tcp,C#,Multithreading,Tcp,通常我不想尝试这个,但我正在制作一个定制的unity服务器,unity在多线程方面有问题,不允许您使用任何unity功能,并且说这必须从主线程调用。所以我的问题是,有没有可能让TCP客户端在没有线程的情况下接收数据。我环顾四周,找不到其他选择 我目前拥有的代码: //TCP TCP = new TcpClient (ip, 25001); stream = TCP.GetStream (); //TCP thread TCPrecieve = new Thread (new ThreadSta

通常我不想尝试这个,但我正在制作一个定制的unity服务器,unity在多线程方面有问题,不允许您使用任何unity功能,并且说这必须从主线程调用。所以我的问题是,有没有可能让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);
        }
    }

非常感谢您提供的任何建议。

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

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

我不太了解团结,但你需要


使用异步IO无法解决此问题,因为在线程池线程上调用完成回调。

如果不希望客户端阻塞,只需使用TcpClient类中的
Begin…
函数即可。是的,异步编程ftw,你可以,但是你需要有一个主等待点,当你在套接字上有数据时,或者当你需要做其他工作时,它就会被唤醒。它可以通过选择来实现。