C#入门简单网络编程?

8

我目前对C#还不熟悉,需要了解简单的服务器-客户端架构!

我正在尝试编写一个简单的服务器/客户端程序,在这个程序中,客户端可以将变量发送到服务器,服务器可以将其发送给另一个客户端。问题是我对此一无所知,因为我对C#还很陌生,尽管我有一些Java的经验(但在网络方面仍然不熟悉)。

我的问题是:

  1. 我需要编写多少个文件?
  2. 有没有人能够提供一个框架或示例程序,类似于这样的程序?
  3. 什么是TCP服务器?

这是为在线游戏而设计的。一个客户端会掷骰子,服务器必须向所有其他客户端显示第一个客户端掷出的值。

任何帮助都将不胜感激!


5
提示:不要相信客户端。通常情况下,客户端应该向服务器请求掷骰子,并且服务器会将投掷的值发送给所有客户端。 - Dark Falcon
1
我建议你研究一下WCF。对于WCF初学者来说,一本很好的书是WCF Step By Step。如果你想了解你正在尝试做什么的具体细节,可以提前阅读聊天客户端示例。WCF还将简化身份验证和授权过程。 - Garvin
3个回答

8

7

由于您计划使用TCP(因为您需要状态),因此您需要制定一种策略。您将获得有关建立连接和来回传输某种数据的大量信息。Google会提供更多信息,超出您的承受范围。以下是一些步骤,以帮助您了解情况。

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

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

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

简而言之,1是握手,2是保持活动状态,3是来回传递数据。

现在,无论是使用Socket还是WCF,我建议先了解TcpClient编程,然后使用WCF。您会惊讶于套接字编程是多么简单,但开销很大。不用被吓倒。协调调用、线程以及安全性是很费力的工作。另一方面,WCF确实可以削减一些这种开销。

我建议您查看这个问题...

如何使用基于Socket的客户端与WCF(net.tcp)服务进行通信?


5

1) 文件数量取决于您的特定实现。您可以简单地创建一个服务器类和一个客户端类(可以在一个文件中拥有多个类)。根据设计的复杂性和选择,您可能会有许多文件或只有几个。

2)一个简单的TCP服务器/客户端的好教程可以在这里找到。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接