套接字编程中的客户端到客户端通信与许多客户端

Client to client communication in socket programming with a lot of clients

本文关键字:客户端 通信 许多 套接字 编程      更新时间:2023-10-16

我正在使用c#开发一个聊天应用程序。我已经完成了服务器和客户端之间通信所需的一切,但是,我不确定该怎么做才能使客户端能够相互通信。

我在互联网上搜索了很多。实际上,我以前问过几乎相同的问题。

套接字编程中的客户端到客户端消息传递

现在我知道有两种方法可以完成这项工作。

第一个是直接客户端到客户端通信,其中一个客户端充当另一个客户端的服务器,但由于系统防火墙可能会阻止客户端充当服务器,因此它有一些缺点。

第二种方法是让服务器通过接收来自其中一个客户端的消息并将其发送到另一个客户端来进行通信。我个人更喜欢这个,因为我认为它必须更可靠,我们可以绝对确定消息将被发送和接收。如果我错了,请告诉我。

但是,我遇到的问题是,我不知道客户端应该如何让服务器知道他想要与之通信的其他客户端。更具体地说,假设客户端 A 想要与客户 B 交谈。因此,他使用客户端 B 的用户名或 IP 地址向服务器发送请求。现在,服务器应该如何找到客户端 B?例如,它是否必须保留客户端列表并使用 for 语句搜索客户端 B?如果有成百上千甚至数十万的客户端连接到服务器怎么办?

如果我没有清楚地解释我的问题,请告诉我。任何帮助都是值得赞赏的。

具有一个中央服务器的解决方案听起来是正确的。作为一般想法 - 服务器应保留连接到它的所有客户端的列表。然后,当客户端 A 想要向客户端 B 发送消息时,它会向服务器发送一条消息,指定消息应到达哪个其他客户端。

在这种情况下,服务器必须保留连接到它的客户端列表。以下是它应该如何工作:

  1. 客户端 A 连接到服务器
  2. 服务器向客户端发送可供他使用的客户端列表
  3. 客户端 A 向服务器发送它要向其发送消息的客户端(客户端 B(的名称(或某个 ID(,以及消息
  4. 服务器发送客户端 B 消息