套接字编程中的客户端到客户端通信与许多客户端
Client to client communication in socket programming with a lot of clients
我正在使用c#开发一个聊天应用程序。我已经完成了服务器和客户端之间通信所需的一切,但是,我不确定该怎么做才能使客户端能够相互通信。
我在互联网上搜索了很多。实际上,我以前问过几乎相同的问题。
套接字编程中的客户端到客户端消息传递
现在我知道有两种方法可以完成这项工作。
第一个是直接客户端到客户端通信,其中一个客户端充当另一个客户端的服务器,但由于系统防火墙可能会阻止客户端充当服务器,因此它有一些缺点。
第二种方法是让服务器通过接收来自其中一个客户端的消息并将其发送到另一个客户端来进行通信。我个人更喜欢这个,因为我认为它必须更可靠,我们可以绝对确定消息将被发送和接收。如果我错了,请告诉我。
但是,我遇到的问题是,我不知道客户端应该如何让服务器知道他想要与之通信的其他客户端。更具体地说,假设客户端 A 想要与客户 B 交谈。因此,他使用客户端 B 的用户名或 IP 地址向服务器发送请求。现在,服务器应该如何找到客户端 B?例如,它是否必须保留客户端列表并使用 for 语句搜索客户端 B?如果有成百上千甚至数十万的客户端连接到服务器怎么办?
如果我没有清楚地解释我的问题,请告诉我。任何帮助都是值得赞赏的。
具有一个中央服务器的解决方案听起来是正确的。作为一般想法 - 服务器应保留连接到它的所有客户端的列表。然后,当客户端 A 想要向客户端 B 发送消息时,它会向服务器发送一条消息,指定消息应到达哪个其他客户端。
在这种情况下,服务器必须保留连接到它的客户端列表。以下是它应该如何工作:
- 客户端 A 连接到服务器
- 服务器向客户端发送可供他使用的客户端列表
- 客户端 A 向服务器发送它要向其发送消息的客户端(客户端 B(的名称(或某个 ID(,以及消息
- 服务器发送客户端 B 消息
相关文章:
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 提升::Asio 异步聊天客户端停止与服务器通信
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- 如何让客户端通过modbus-tcp协议与多个服务器通信?
- 如何将数据序列化为C++ zmq 客户端和 Python zmq 服务器之间的通信
- 使用UNIX套接字C++客户端与Node.js服务器通信的简单示例
- 嗅探 QWebsocket 服务器 - 客户端通信
- 证书验证在客户端服务器通信中使用boost :: asio和openssl失败
- 客户端JavaScript和C 套接字服务器之间的通信
- 如何在服务器和客户端之间进行异步通信
- C++:一个客户端与多个服务器通信
- C++:服务器和客户端之间的经典通信练习
- C++ 客户端无法与 Java 服务器通信
- 使用 C/C++、SSL 协议的客户端和服务器通信不起作用
- 如果传递长类型,32位客户端如何与64位服务器通信
- c++tcp多线程客户端/服务器-如何与线程套接字处理程序进行通信
- C/C++服务器,通过stdin/stdout与客户端通信(阻塞stdin,直到读取了大量字节)
- 套接字编程中的客户端到客户端通信与许多客户端
- 使用C++和Boost::Asio的N方客户端到客户端通信
- C ++ Winsock - 服务器只与单个客户端通信,而它应该与每个客户端通信