C# webstock 怎么给同一个网络下的指定的电脑发送消息,要详细点的过程我是新人,有源码最好谢谢,目前来说每次看到的同一台电脑的客户端的ip的端口号一直变动,所以怎么去给指定的电脑或者客户发送消息,(我想做的就是服务器给不同的客户推送不同的消息,现在发现同一个网关下的电脑区分不了谁是谁) remoteendpoint 一直在变动,我怎么知道是哪个客户哪个电脑登入的这个ip,我想固定到用户和电脑的ip进行推送消息
1条回答 默认 最新
- 单元测试是啥? 2023-07-14 15:20关注
要实现 C# WebSocket 给同一网络下的指定电脑发送消息,需要以下步骤:
为每个客户端连接保留唯一的标识符,例如使用客户端的用户名或其他唯一标识符。可以在客户端建立连接时将该标识符传递给服务器。
服务器端维护一个集合,用于保存每个客户端连接的标识符和对应的 WebSocket 连接对象。
当服务器接收到要推送的消息时,遍历客户端连接的集合,根据需要匹配指定的电脑或客户端,并发送消息给匹配的连接。
下面是一个简单的示例代码,演示了如何实现此功能:
using System; using System.Collections.Concurrent; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WebSocketServer { public class WebSocketHandler { private ConcurrentDictionary<string, WebSocket> clients = new ConcurrentDictionary<string, WebSocket>(); public async Task AcceptWebSocket(WebSocket webSocket, string clientId) { clients.TryAdd(clientId, webSocket); while (webSocket.State == WebSocketState.Open) { var buffer = new byte[1024]; var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Text) { var message = Encoding.UTF8.GetString(buffer).TrimEnd('\0'); Console.WriteLine($"Received message: {message}"); // 根据需要判断消息发往哪些客户端 // 例如,向特定客户端推送消息 if (clientId == "client1") { await SendMessageToClient(webSocket, "Hello client1!"); } } else if (result.MessageType == WebSocketMessageType.Close) { break; } } clients.TryRemove(clientId, out _); await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); } public async Task SendMessageToClient(WebSocket webSocket, string message) { var buffer = Encoding.UTF8.GetBytes(message); await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None); } public async Task SendMessageToAllClients(string message) { foreach (var client in clients) { await SendMessageToClient(client.Value, message); } } } }
上述代码使用
ConcurrentDictionary
维护了客户端连接的标识符和对应的 WebSocket 对象。在接收到消息时,根据匹配逻辑发送消息给指定的客户端。请注意,上述代码只是示例,并不包含完整的 WebSocket 服务器实现。你需要根据自己的需求进行适当的修改和扩展。
此外,为了确保能够准确区分不同的客户端,可以考虑使用身份验证等机制来验证客户端的身份,并将其与相应的 WebSocket 连接关联起来。这有助于确保消息被发送给正确的客户端。
希望这些信息对你有所帮助!如有更多问题,请随时提问。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
- ¥15 关于#hadoop#的问题
- ¥15 (标签-Python|关键词-socket)
- ¥15 keil里为什么main.c定义的函数在it.c调用不了