沪上百卉 2023-01-23 10:44 采纳率: 23.8%
浏览 44

C# webstock

C# webstock 怎么给同一个网络下的指定的电脑发送消息,要详细点的过程我是新人,有源码最好谢谢,目前来说每次看到的同一台电脑的客户端的ip的端口号一直变动,所以怎么去给指定的电脑或者客户发送消息,(我想做的就是服务器给不同的客户推送不同的消息,现在发现同一个网关下的电脑区分不了谁是谁) remoteendpoint 一直在变动,我怎么知道是哪个客户哪个电脑登入的这个ip,我想固定到用户和电脑的ip进行推送消息

  • 写回答

1条回答 默认 最新

  • 单元测试是啥? 2023-07-14 15:20
    关注

    要实现 C# WebSocket 给同一网络下的指定电脑发送消息,需要以下步骤:

    1. 为每个客户端连接保留唯一的标识符,例如使用客户端的用户名或其他唯一标识符。可以在客户端建立连接时将该标识符传递给服务器。

    2. 服务器端维护一个集合,用于保存每个客户端连接的标识符和对应的 WebSocket 连接对象。

    3. 当服务器接收到要推送的消息时,遍历客户端连接的集合,根据需要匹配指定的电脑或客户端,并发送消息给匹配的连接。

    下面是一个简单的示例代码,演示了如何实现此功能:

    
    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 连接关联起来。这有助于确保消息被发送给正确的客户端。

    希望这些信息对你有所帮助!如有更多问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 1月23日
  • 修改了问题 1月23日
  • 创建了问题 1月23日

悬赏问题

  • ¥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调用不了