C# 多线程服务器,独立发送数据?

C# 多线程服务器,独立发送数据?,c#,C#,我正在尝试构建一个简单的多线程tcp服务器。客户端连接并向服务器发送数据,服务器响应并再次等待数据。问题是我需要服务器在单独的线程中侦听传入的数据,并能够随时向客户端发送命令(例如通知新的更新)。据我所知,当客户端向服务器发送数据时,若服务器不响应任何数据,客户端应用程序就不允许我发送更多数据,服务器就不会接收这些数据。如果我以以太方式发送数据,tcpclient是否需要“确认”数据 以下是服务器的源代码: 如何使服务器在“DoChat”函数循环之外的单独线程中向客户机发送命令?还是我必须处理这

我正在尝试构建一个简单的多线程tcp服务器。客户端连接并向服务器发送数据,服务器响应并再次等待数据。问题是我需要服务器在单独的线程中侦听传入的数据,并能够随时向客户端发送命令(例如通知新的更新)。据我所知,当客户端向服务器发送数据时,若服务器不响应任何数据,客户端应用程序就不允许我发送更多数据,服务器就不会接收这些数据。如果我以以太方式发送数据,tcpclient是否需要“确认”数据

以下是服务器的源代码:

如何使服务器在“DoChat”函数循环之外的单独线程中向客户机发送命令?还是我必须处理这条线索中的所有事情?我是否必须响应客户发送给我的每个请求?谢谢

问题是我需要服务器在单独的线程中侦听传入的数据

不,有一个异步API。您可以轮询线程列表,以查看哪些新数据正在等待,很可能是由工作线程完成的

据我所知,当客户端向服务器发送数据时,若服务器并没有响应任何 数据,客户端应用程序不允许我发送更多数据,服务器根本不接收它们

这比套接字的工作方式要糟糕得多。套接字完全可以在发送和接收方向同时使用流式ata

如何使服务器在“Docat”之外的单独线程中向客户端发送命令 功能

嗯,我知道你的工作很费钱

但是:这个例子是迟钝的。完全反模式。每个客户端一个线程?1000多个客户端连接后,您将遇到内存问题和性能问题。你会得到大量的上下文切换

其次,客户端不是异步的,因为它不是异步编写的。也许我建议你阅读一下文档,阅读一下sockts,然后试着自己去做?然后带着问题回来,这些问题不仅仅是“我只是想复制粘贴”

通过正确的编程,这是完全正常的。我正在开发一个类似的应用程序,随时向客户机发送数据,并从客户机获取修改数据流的命令。作品具有魅力

如果我以以太方式发送数据,tcpclient是否需要“确认”数据

是和否。不,不是为了TCP-TCP是在兜帽下的wn握手。是的,如果您的协议决定必须这样做,这是程序员级的设计决定。根据数据的内容,可能需要,也可能不需要。有时,确认提供了更多的信息(时间戳服务器端,跟踪数字),而不是纯粹的“我知道了”