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

时间:2014-12-20 21:36:53

标签: c# c++ sockets client server

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

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

Client to client messaging in socket programming

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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