【问题标题】:Multithreaded server, send data independently?多线程服务器,独立发送数据?
【发布时间】:2012-02-06 22:04:04
【问题描述】:

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

这是服务器的来源:http://csharp.net-informations.com/communications/files/print/csharp-multi-threaded-server-socket_print.htm

如何让服务器在“DoChat”函数循环之外的单独线程中向客户端发送命令?还是我必须处理该线程中的所有内容?我必须响应客户发送给我的每个请求吗?谢谢!

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    不,有一个异步 API。您可以轮询线程列表以查看哪些新数据正在等待,显然要从工作线程完成。

    据我了解,当客户端向服务器发送数据时,如果服务器没有任何响应 数据,客户端应用程序不允许我发送更多数据,服务器根本不接收它们。

    这比套接字的工作方式更垃圾编程。套接字完全可以同时发送和接收流数据。

    如何让服务器在“DoChat”之外的单独线程中向客户端发送命令 函数

    好吧,我知道你的工作要花钱。

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

    其次,客户端不是异步的,因为它不是这样写的。 Mayy 我建议 giong 到文档,阅读 sockts 并尝试自己构建它?然后回来提出比“我只是尝试复制粘贴”更多的问题。

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

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

    是的,不是的。不,不是 TCP —— TCP 是在底层握手的。是的,如果您的协议决定必须这样做,这是程序员级别的设计决定。它可能需要也可能不需要,取决于数据的内容。有时,确认提供更多信息(时间戳服务器端、跟踪编号),而不仅仅是“我知道了”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 2012-07-10
      相关资源
      最近更新 更多