使用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"); } }
最佳解决方案
更换websocket监听的端口号,比如换成9998