OO客户端 - 服务器设计

问题描述:

我正在使用c#设计客户端 - 服务器应用程序。我仍然是初学者,并且正在学习c#和OO的绳索。现在,我在一张纸上写了几个想法。基本上,我会创建一个类“客户端”,其中包含所有的细节(套接字等)。客户端类将被创建并存储在服务器将在循环中使用的数组中。如果连接了100个客户端,那么使用的内存是否会很大?OO客户端 - 服务器设计

我猜的服务器将通过阵列检查了“dataSend”标志,那么将旗服务器创建的NetworkStream对象在客户端中的每个客户端循环。

我应该在客户端的连接创建的NetworkStream对象和密切的联系?

如果任何人都可以在写我自己的客户端 - 服务器软件的方向指向我,我们将不胜感激。

+4

听起来像是某人一个沉重的项目开始了... – MunkiPhD 2010-01-15 14:09:59

+0

我可以说,我是雄心勃勃的(又名,我贪多我嚼不烂)。;) – cam 2010-01-15 14:16:52

+0

雄心勃勃没有错。只要有耐心,提出许多问题,并在学习的同时集中精力处理简单,实际的问题。 – 2010-01-15 14:51:30

凸轮,你所描述的不是很真实客户机/服务器设计,为双方在您的方案紧密耦合,共享对象的数组。而是根据请求和回答考虑它。客户端通过网络向服务器发出请求,服务器通过网络向客户端返回响应。它们共享两件事:一个常见的网络连接和服务器公开的接口知识。

Web是这种模式的一个伟大的,熟悉的例子。客户端(您的浏览器)组成HTTP Request并通过网络连接将其发送到服务器。服务器解释请求并将HTTP响应发送回客户端。每个人都知道如何解释HTTP标准。这是他们之间的联系,没有别的。

我建议开始实施一个非常简单的请求/响应。例如,客户端发送'TIME'请求,服务器回应当前时间,请求'DATE'以当前日期回应。通过实现一个简单的协议,您可以专注于学习.NET网络类的机制。

表示连接到服务器的每个客户端的客户端类数组是处理此问题的好方法。您可能还想要一个代表实际套接字和网络代码的成员类,它使它更清晰。

临提示:退房的源代码一些泥浆。

+0

会员级别是什么意思? – cam 2010-01-15 14:13:37

+0

您将有一个客户端类(在服务器源代码中),它代表连接到服务器的1个客户端。然后,您将包含所有与客户端通信的代码放入另一个类(例如'networkInterface'),这将成为客户端类的成员。这样处理客户端数据的所有逻辑以及与客户端进行通信的代码都是独立的。 – 2010-01-15 14:22:41

凸轮,我们需要你正在努力实现给你一个很好的答案是什么一些详细信息。一般来说,我建议你使用WCF。您只需创建一个服务,为您的操作定义一个接口,然后按照您的意愿,尽可能多的客户端可以使用该接口。在实践中很容易。

像这样的事情将是适当的:

  • 像你说的,一类名为Client持有客户端套接字。
  • 在服务器上维护一个以客户端的ip:port作为关键字,客户端对象作为值的表。这将帮助您跟踪连接的客户端。
  • 为客户端使用异步发送和接收。所以相反,您通过客户端迭代,每个客户端都会收到数据,完成这项工作并回应连接的客户端。