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

时间:2015-06-04 19:08:18

标签: c# multithreading tcp

通常我不想尝试这个,但是我正在制作一个自定义统一服务器,并且统一存在多线程问题并且不允许你使用任何统一功能并且说必须从主线程调用。所以我的问题是,是否有可能在没有线程的情况下接收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);
        }
    }

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

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

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

我不太了解团结,但你需要marshal calls to the main thread

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