c# - 具有大量客户端的套接字编程中的客户端到客户端通信

标签 c# c++ sockets client server

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

我在互联网上搜索了很多。事实上我以前也问过几乎同样的问题。

Client to client messaging in socket programming

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

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

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

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

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

最佳答案

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

关于c# - 具有大量客户端的套接字编程中的客户端到客户端通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27584548/

相关文章:

c# - 如何更新交叉引用表?

c# - 运行 powershell 脚本时云无法加载文件或程序集 'System.Management.Automation'

c++ - 什么是段错误?

linux - 如何异步检查 ipv6 网络接口(interface)是否在 linux 中将状态从 tentative 更改为 "valid"?

c++ - 什么会导致我的数据包的字节顺序变得部分困惑?

c# - Java/C# 消息传递的 REST 架构的性能

c# - IronScheme 无法完成哪些要求?

c++ - 通过时间比较猜测字符串。是否可以?

c++ - 在 LockFileEx 之后调用 ReadFile 时崩溃

javascript - 通过 JavaScript 连接到套接字(没有 flash)