2012-02-06 34 views
2

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

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

我怎样才能让服务器发送命令在单独的线程客户端的“DoChat”功能外循环?或者我必须处理该线程中的所有内容?我必须回复客户发送给我的每个请求吗?谢谢!

回答

1

的问题是我需要的服务器单独的线程

没有,有一个异步API来侦听传入的数据。你可以通过轮询一个线程列表来查看哪些新数据在等待,很明显是从工作线程完成的。

据我了解,当过客户端发送数据到服务器,若服务器不与任何 数据进行响应,客户端应用程序不会让我发送更多的数据,服务器根本不会接收他们。

这是比套接字工作方式更多的废话编程。在同一时间发送和接收方向上,套接字完全可以与流式传输协议完全兼容。

我怎样才能让服务器发送命令在单独的线程客户端的“DoChat” 功能

WEL之外,我diong你的工作需要花钱。

但是:这个例子被推迟了。作为完全反模式。每个客户端一个线程?一旦有1000多个客户端连接,您将遇到memroy问题和perforamnce问题。你会得到大量的上下文切换。

其次,客户端不是异步的,因为它不是这样写的。 Mayy我向文档建议giong,阅读sockts并试图自己创建它?那么回来的问题不仅仅是“我只是试图复制粘贴”。

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

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

是和否。不,不适用于TCP - TCP是否会在引擎盖下握手。是的,如果你的协议决定必须这样做,这是程序员级别的设计决定。根据数据的内容,它可能也可能不是必需的。有时候,确认提供了更多的信息(时间戳服务器端,跟踪数字),并不纯粹是因为“我明白了”。

相关问题