将 Socket 字符串从服务器发送到特定客户端
Posted
技术标签:
【中文标题】将 Socket 字符串从服务器发送到特定客户端【英文标题】:Send Socket string from server to specific client 【发布时间】:2020-08-08 09:22:42 【问题描述】:我正在使用 C# 语言来允许在 WPF 平台中设计的客户端通过服务器将字符串发送到另一个客户端。
但是我的代码的问题是我在使用 TCP 协议时从我的服务器向所有客户端广播相同的消息。我知道 TCP 以可以指定端点这一事实而闻名。但我不知道如何。
这就是我在服务器中所做的。
foreach (Socket _connectedUsers in clientSockets)
byte[] data = Encoding.UTF32.GetBytes(Message);
Socket socket = (Socket)_connectedUsers;
socket.Send(data);
这段代码的作用是从 clientSockets 的列表中向所有人广播消息。
现在是问题。
我该怎么做:
byte[] data = Encoding.UTF32.GetBytes(Message);
Socket socket = (Endpoint User IP Address);
socket.Send(data);
【问题讨论】:
你不能使用 TCP 广播。 您不是在广播,只是向您的所有客户端连接发送相同的消息。所以是的,你已经在这样做了——只是为了他们所有人。因此,仅使用一个 clientSocker,您只能发送给一个特定的客户端。 UDP 可以广播。 @FrankNielsen 那么,我怎样才能只发送到一个特定的端点?而不是发送给所有人? 【参考方案1】:您必须识别您想要向其发送消息的客户端,并且仅针对该客户端套接字执行相同操作。
var _connectedUser = FindClientById( client.Id, clientSockets );
byte[] data = Encoding.UTF32.GetBytes(Message);
Socket socket = (Socket)_connectedUser;
socket.Send(data);
因此,您面临的挑战是识别代表您要将消息发送到的客户端的 clientSocket。
【讨论】:
谢谢,这听起来合乎逻辑。你知道我该怎么做吗? 这将是一个不同的、更具架构性的问题。但我认为你可以在这个网站上提出类似的问题,关于如何跟踪客户端连接。 我想知道,如果您知道如何将 IPEndPoint 转换为 Socket? 你不能转换它。 IPEndPoint 是套接字连接或正在监听的东西。以上是关于将 Socket 字符串从服务器发送到特定客户端的主要内容,如果未能解决你的问题,请参考以下文章
如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?