gpt4 book ai didi

c# - 你能有一个没有线程的 TCP 客户端吗

转载 作者:可可西里 更新时间:2023-11-01 02:51:40 24 4
gpt4 key购买 nike

通常我不想尝试这个,但我正在制作一个自定义的 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。不过,我怀疑那是你想要的。事实上,您可能希望连接操作也不发生在主线程上,这样它就不会被阻塞。

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

我不太了解统一,但你需要 marshal calls to the main thread .

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

关于c# - 你能有一个没有线程的 TCP 客户端吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com