将 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 字符串从服务器发送到特定客户端的主要内容,如果未能解决你的问题,请参考以下文章

Python套接字,从服务器请求文件然后等待接收它

网络协议栈学习socket通信实例

通过套接字发送字符串(python)

如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?

在actionscript服务器和java客户端之间通过socket发送对象

C Socket Send() 直到程序终止才发送