【问题标题】:OO Client-Server DesignOO 客户端-服务器设计
【发布时间】:2010-01-15 14:08:02
【问题描述】:

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

我猜服务器会循环遍历数组中的每个客户端,检查“dataSend”标志,然后该标志将标志服务器为客户端创建一个 NetworkStream 对象。

我应该在客户端连接时创建一个网络流对象并在连接时关闭吗?

如果有人能指出我编写自己的客户端-服务器软件的方向,将不胜感激。

【问题讨论】:

  • 对于刚起步的人来说,这听起来像是一项艰巨的项目......
  • 我能说什么,我雄心勃勃(又名,我咬得比我能咀嚼的还多)。 ;)
  • 雄心勃勃没有错。请耐心等待,提出很多问题,并在学习的同时专注于解决简单、实际的问题。

标签: c# client-server


【解决方案1】:

Cam,您所描述的并不是真正的客户端/服务器设计,因为在您的场景中,这两个方面紧密耦合,共享一组对象。而是从请求和响应的角度考虑它。客户端通过网络向服务器发出请求,服务器通过网络向客户端返回响应。它们有两个共同点:公共网络连接和服务器公开的接口知识。

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

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

【讨论】:

    【解决方案2】:

    代表连接到服务器的每个客户端的客户端类数组是处理此问题的好方法。您可能还希望有一个代表实际套接字和网络代码的成员类,以使其保持清洁。

    专业提示:查看一些 MUD 的源代码。

    【讨论】:

    • 成员类是什么意思?
    • 您将有一个客户端类(在服务器源代码中),它代表 1 个连接到服务器的客户端。然后,您会将与客户端通信的所有代码封装到另一个类(例如“networkInterface”)中,该类将是客户端类的成员。这样,处理客户端数据的所有逻辑和与客户端通信的代码都是分开的。
    【解决方案3】:

    Cam,我们需要更多关于您想要达到的目标的详细信息,以便为您提供一个非常好的答案。一般来说,我建议你使用 WCF。您只需要创建一个服务,为您的操作定义一个接口,然后尽可能多的客户端可以根据需要使用该接口。在实践中这很容易。

    【讨论】:

      【解决方案4】:

      这样的事情比较合适:

      • 就像你说的,一个名为 client 的类来保存客户端套接字。
      • 在服务器上维护一个表,其中客户端的 ip:port 作为键,客户端对象作为值。这将帮助您跟踪连接的客户。
      • 为客户端使用异步发送和接收。因此,您无需遍历客户端,而是每个客户端都将接收数据、完成工作并响应连接的客户端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        相关资源
        最近更新 更多