Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows通用(IoT)Websocket服务器到广播_C#_Win Universal App_Windows 10 Iot Core - Fatal编程技术网

C# Windows通用(IoT)Websocket服务器到广播

C# Windows通用(IoT)Websocket服务器到广播,c#,win-universal-app,windows-10-iot-core,C#,Win Universal App,Windows 10 Iot Core,我需要像图书馆Websocket夏普Windows通用的东西。我试图在Windows 10 IoT上构建服务器来广播一些数据(温度和其他事件),我想构建一个类似于拖缆的东西来广播Arduino的实时数据。 在中,我只能找到制作websocket客户端的说明。有什么想法吗 通用Windows平台(UWP)支持客户端和服务器使用WebSocket。您可能会发现一个名为的库,它允许您将一个简单的HTTP和WebSocket服务器嵌入到您的UWP应用程序中。该库提供了一个简单的HTTP服务器,支持Web

我需要像图书馆Websocket夏普Windows通用的东西。我试图在Windows 10 IoT上构建服务器来广播一些数据(温度和其他事件),我想构建一个类似于拖缆的东西来广播Arduino的实时数据。
在中,我只能找到制作websocket客户端的说明。有什么想法吗

通用Windows平台(UWP)支持客户端和服务器使用WebSocket。您可能会发现一个名为的库,它允许您将一个简单的HTTP和WebSocket服务器嵌入到您的UWP应用程序中。该库提供了一个简单的HTTP服务器,支持WebSocket

class WebSocketHandler : IWebSocketRequestHandler
{
    private Dictionary<string,WebSocket> _webSockets = new Dictionary<string, WebSocket>();
    public event MessageRecivedHandler MessageRecived;
    private IdHelper _portMappings;

    public WebSocketHandler(IdHelper portMappings)
    {
        _portMappings = portMappings;
    }



    public void Connected(WebSocket socket)
    {
        var guid = Guid.NewGuid().ToString();
        _webSockets.Add(guid, socket);


        socket.DataReceived += (webSocket, frame) => MessageRecived?.Invoke(_webSockets.First(x => x.Value == webSocket).Key,webSocket, frame);
        socket.ConnectionClosed += (webSocket) =>
        {
            var connection = _webSockets.First(s => s.Value == webSocket);
            _webSockets.Remove(connection.Key);
        };

        if (_portMappings.IsBindingPosible())
        {
            _portMappings.Bind(guid);

            var message = new ServerMessage()
            {
                ClientID = guid,
                Command = "Init",
                Value = _portMappings.CheckBinding(guid).ToString()
            };
            SendMessage(guid, message);
        }
        else
        {
            var message = new ServerMessage()
            {
                ClientID = guid,
                Command = "Init",
                Value = "Max Number Of Clients Reached. Please close connection"
            };
            SendMessage(guid, message);
        }


    }

    public bool WillAcceptRequest(string uri, string protocol)
    {
        return true;
    }

    public async Task BroadcastMessage(string message)
    {
        await ThreadPool.RunAsync((workItem) => _webSockets?.AsParallel().ForAll(webSocket => webSocket.Value.Send(message)));
    }

    public async Task SendMessage(string guid, ServerMessage message)
    {
        await ThreadPool.RunAsync((workItem) => _webSockets?.First(x => x.Key == guid).Value.Send(JsonConvert.SerializeObject(message)));
    }
    public delegate void MessageRecivedHandler(string guid, WebSocket socket, string message);
}
类WebSocketHandler:IWebSocketRequestHandler
{
私有字典_webSockets=新字典();
公共事件MessageReceivedHandler MessageReceived;
私有IdHelper\u端口映射;
公共WebSocketHandler(IdHelper端口映射)
{
_portMappings=portMappings;
}
已连接的公用插座(WebSocket插座)
{
var guid=guid.NewGuid().ToString();
_添加(guid,套接字);
socket.DataReceived+=(webSocket,frame)=>messagereceived?.Invoke(_webSockets.First(x=>x.Value==webSocket).Key,webSocket,frame);
socket.ConnectionClosed+=(webSocket)=>
{
var connection=\u webSockets.First(s=>s.Value==webSocket);
_WebSocket.移除(连接.键);
};
if(_portMappings.IsBindingPosible())
{
_portMappings.Bind(guid);
var message=newservermessage()
{
ClientID=guid,
Command=“Init”,
Value=\u portMappings.CheckBinding(guid).ToString()
};
发送消息(guid,消息);
}
其他的
{
var message=newservermessage()
{
ClientID=guid,
Command=“Init”,
Value=“已达到最大客户端数。请关闭连接”
};
发送消息(guid,消息);
}
}
公共bool WillAcceptRequest(字符串uri、字符串协议)
{
返回true;
}
公共异步任务广播消息(字符串消息)
{
等待ThreadPool.RunAsync((workItem)=>\u webSockets?.aspallel().ForAll(webSocket=>webSocket.Value.Send(message));
}
公共异步任务SendMessage(字符串guid,服务器消息)
{
等待ThreadPool.RunAsync((workItem)=>\u webSockets?.First(x=>x.Key==guid).Value.Send(JsonConvert.SerializeObject(message));
}
公共委托void MessageRecivedHandler(字符串guid、WebSocket套接字、字符串消息);
}

是否有可能向我展示您在这个类中使用的名称空间?我有一些冲突。@Kamil,
WebSocketHandler
不在库中,它是一个自定义处理程序,根据您的要求继承自
IWebSocketRequestHandler
。对于在“Raspberry Pi上的Windows IoT”主题中搜索信息的所有人:不要浪费时间。我不知道原因是什么,但RBPi上的Windows10IoT会让你生气,也许会让你发疯。有很多意想不到的错误、错误和自动重启。只要使用拉斯比安,如果有必要的话,可以使用docker。这就是你所需要的。我浪费了大约5天来让它工作。