【发布时间】:2019-11-11 18:21:29
【问题描述】:
- 已实现 Tcp 服务器
- 已实现 TCP 客户端
服务器启动
客户端 A 连接
客户端 B 连接
客户端 C 连接
客户端 A 向服务器发送消息(但他想发送给客户端 B 或 C 或所有客户端)
例如:比方说……
服务器需要将此消息发送给客户端B
How client A will send the message so that server will know that A want to
send this message to B or C etc..
客户端 A 是否应该连同消息一起发送 ID 让我们说客户端 B 以便服务器提取 ID 并在不知何故知道会将该消息转发给客户端 B 之后?
..或者我认为聊天应用程序的工作方式完全错误?
每个客户端也应该作为服务器工作吗?当客户想与客户 B 交谈时,同样的逻辑适用吗?
我在网上搜索了一些示例,但大部分都依赖于简单的服务器和一个客户端。
我不需要代码,我只需要想法,这样我就可以理解它是如何工作的。
任何帮助表示赞赏,谢谢!
【问题讨论】:
-
客户端不直接向其他客户端发送数据,他们将数据发送到服务器,服务器负责将数据传递给预期的目标。对于公共聊天室,目标是“除了向我发送数据的客户之外的所有其他客户”。但是,我不确定你在问什么。
-
为了将来参考,StackOverflow 的存在是为了帮助现有代码。如果您说“我不需要代码”,那么您将问题发布到了错误的论坛。您在谈论的是客户端-服务器架构和对等架构之间的区别。客户端-服务器更容易。是的,您将在客户请求中包含有关预期收件人的信息。服务器没有其他方法可以确定将消息转发到哪个客户端。
-
您需要自己实现一些逻辑才能知道将消息路由到哪里。来自客户端的消息数据将需要包含标识预期收件人的内容,服务器可以使用这些内容来决定下一步将其发送到哪里。就像您发送电子邮件或寄信一样。当然,您还可以包括创建群聊的功能,从而将消息发送给多个收件人。所以是的,你的想法基本上是正确的
-
"每个客户端也应该作为服务器工作吗?"这介于点对点或将每个客户端作为故障转移服务器之间。但通常客户端不适合充当服务器。在考虑任何花哨的东西之前,先尝试一个基本的客户端-服务器。
-
一般每个客户端都有一个SessionID。他们在每次请求时都会发送一些东西,以解决整个事情的无国籍状态。 Cookie 是 SessionID 的常见示例。根据具体情况,您可能需要一个用于登录的用户 ID。在这种情况下,只发布用户 ID。将这些 ID 转换为人类可读的名称是客户端 UI 的工作,反之亦然。您只能使用会话或更好的用户 ID。
标签: c# vb.net chat tcpclient tcpserver