System.Net.Sockets.SocketException (0x80004005): 以一种访问权限不允许的方式做了一个访问套接字的尝试。

¥22.00

使用Fleck开发WebSocket的服务,启动时总是报错


System.Net.Sockets.SocketException (0x80004005): 以一种访问权限不允许的方式做了一个访问套接字的尝试。
   在 System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   在 System.Net.Sockets.Socket.Bind(EndPoint localEP)
   在 Fleck.WebSocketServer.Start(Action`1 config)
   在 ASP.global_asax.FleckWebSocket() 位置 d:\web\Global.asax:行号 27


代码如下:

  void Application_Start(object sender, EventArgs e)
    {
        
        FleckWebSocket();
         
    }
    public void FleckWebSocket()
    {
        string logpath = AppDomain.CurrentDomain.BaseDirectory + "\\chatlog\\FleckWebSocketwss" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
        try
        {
            /*与网站的端口号不一致,与websocket地址的端口号保持一致*/
            var socketServer = new Fleck.WebSocketServer("ws://0.0.0.0:9006");

            
            /*发生错误自动重启*/
            socketServer.RestartAfterListenError = true;
            socketServer.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    File.AppendAllText(logpath, "_[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "]open\r\n");
                    new ImServer.FleckWebSocket().OnOpen(socket);
                };
                socket.OnClose = () =>
                {
                    new ImServer.FleckWebSocket().OnClose(socket);
                };
                socket.OnMessage = Message =>
                {
                    new ImServer.FleckWebSocket().OnMessage(socket, Message);
                };
                socket.OnError = err =>
                {
                    throw err;
                };
            });
        }
        catch (Exception e)
        {
            File.AppendAllText(logpath, "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "]" + e.ToString() + "\r\n");
        }
    }

最佳解决方案

原因分析

9006端口应该已经被其他应用占用了,请使用netstat -a 检查。
websocket中端口冲突时会引发此异常:System.Net.Sockets.SocketException (0x80004005): 以一种访问权限不允许的方式做了一个访问套接字的尝试。

更换websocket监听的端口号,比如换成9998

菜菜小杨 T0 被采纳率100%
2020-12-11 17:45
打赏 1 1
页面统计
3182 访问
1 帮助
0.00 打赏

hierror 2019 © hierror.com 京ICP备13026190号-1

通知消息
  • 暂无任何消息