C# 你能拥有一个没有线程的TCP客户端吗
通常我不想尝试这个,但我正在制作一个定制的unity服务器,unity在多线程方面有问题,不允许您使用任何unity功能,并且说这必须从主线程调用。所以我的问题是,有没有可能让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
//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,你可以,但是你需要有一个主等待点,当你在套接字上有数据时,或者当你需要做其他工作时,它就会被唤醒。它可以通过选择来实现。