【问题标题】:Simple Network Programming in C# for Beginners?适合初学者的 C# 简单网络编程?
【发布时间】:2011-10-31 19:08:48
【问题描述】:

我目前是 C# 新手,我需要了解简单的服务器-客户端架构!

我目前正在尝试编写一个简单的服务器/客户端程序,基本上客户端可以将变量发送到服务器,服务器可以将其发送到另一个客户端。问题是我真的对此视而不见,因为我对 C# 仍然很陌生,尽管我有一些 Java 经验(但仍然没有网络)。

我的问题是:

  1. 我需要写多少个文件?
  2. 谁能为我提供这样的程序的框架或示例?
  3. 什么是 TCP 服务器?

这旨在用于在线游戏。一个客户端将掷骰子,服务器必须向所有其他客户端显示这是第一个客户端掷出的值。

任何帮助将不胜感激!

【问题讨论】:

  • 提示:不要相信客户。通常客户端应该要求服务器掷骰子,服务器会将掷骰子的值发送给所有客户端。
  • 我建议你看看 WCF。一本适合 WCF 初学者的好书是 WCF Step By Step 。如果您想详细了解您正在尝试做什么,您可以提前阅读聊天客户端示例。 Wcf 还将简化身份验证授权过程。

标签: c#


【解决方案1】:

回答您的所有问题:MSDN - Network Programming (.NET 4)

【讨论】:

    【解决方案2】:

    由于您正在计划 TCP(因为您想要状态),因此您需要制定策略。您将获得有关建立连接和来回移动某种数据的大量信息。谷歌会给你比你能处理的更多。在不做所有工作的情况下,这里有几个步骤可以帮助您确定方向。

    1) 连接注册 - 当客户端上线并想与服务器通信时,它首先需要说“嘿,我在这里,想玩骰子”。该初始握手可以是用于心跳和/或事务的连接 ID。如果打开,服务器将使用它来识别数据和相应的线程。

    2) 心跳 - 现在客户端已经向服务器注册,客户端负责提供心跳,表明它仍然存在并且仍计划继续工作。通常每 3 到 10 秒一次即可。

    3) 开发请求/响应协议 - 对于“每个命令”,都会有一个正式的流程。这个正式的过程将包括连接 ID,但也包括一个请求 ID。客户端不会接受响应,除非它收到相应的请求 id。此外,每个请求都需要一个成功或失败响应来确定它是否符合 API。请求中将包含要执行的命令或操作。有些人使用 int 来调度命令 id,然后使用 id 上的开关来调用入口点方法(cmd id = 1 是 connect(),cmd id = 2 是 rolldice(),等等)。您可能会包含额外的有效负载,用于识别命令的结果。

    简而言之,1是握手,2是keep-alive,3是来回传递数据。

    现在无论是使用套接字还是 WCF,我建议对 TcpClient 编程有一个基本的了解,然后再使用 WCF 运行。您会惊讶于套接字编程是多么简单,但开销却是一个杀手。没有什么可以被吓倒的。协调调用、线程和安全性需要大量工作。另一方面,WCF 确实减少了部分开销。

    我会看看这个问题...

    How to use socket based client with WCF (net.tcp) service?

    【讨论】:

      【解决方案3】:

      1) 文件的数量取决于您的特定实现。您可以像为服务器创建 1 个类和为客户端创建 1 个类一样简单地创建此体系结构(文件中可以有多个类)。根据您在设计过程中所做的复杂性和选择,您可能有很多文件或只有几个文件。

      2) 一个简单的 TCP 服务器/客户端的很好的教程可以找到here

      3) TCP 服务器是一个等待来自 TCP 客户端的连接的进程。 TCP 代表传输控制协议。来自Wikipedia:TCP 提供从一台计算机上的程序到另一台计算机上的另一个程序的可靠、有序的字节流传递。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 2020-07-13
        • 2010-09-17
        • 2015-02-11
        • 1970-01-01
        相关资源
        最近更新 更多