WebSocket服务启动失败:HttpListener端口占用异常求助
解决HttpListener启动时端口被占用的问题
排查端口占用进程
- 在Windows系统中,打开命令提示符执行以下命令,找到占用1222端口的进程ID(PID):
netstat -ano | findstr :1222 - 打开任务管理器,切换到「详细信息」标签,通过PID定位对应的进程,若该进程并非必要运行项,直接结束即可释放端口。
修正代码中的资源泄漏问题
当前代码未处理HttpListener的资源释放逻辑,容易导致旧进程残留占用端口;同时async void仅适合事件处理场景,普通方法建议改为async Task,并添加停止服务的方法:
private HttpListener httpListener; public async Task StartServer() { try { httpListener = new HttpListener(); httpListener.Prefixes.Add("http://102.172.45.123:1222/"); httpListener.Start(); Console.WriteLine("Server started successfully"); // 持续监听请求(WebSocket服务需在此处处理升级逻辑) while (httpListener.IsListening) { var context = await httpListener.GetContextAsync(); // 此处添加WebSocket握手、消息处理等逻辑 } } catch (Exception ex) { Console.WriteLine("Error in connection: " + ex.Message); } } // 程序退出或停止服务时调用此方法释放资源 public void StopServer() { if (httpListener != null) { if (httpListener.IsListening) httpListener.Stop(); httpListener.Close(); httpListener = null; } }
替代方案
如果无法终止占用端口的进程,直接更换未被占用的端口即可——修改httpListener.Prefixes.Add()中的端口号(例如改为1223),重新启动服务。
内容的提问来源于stack exchange,提问作者Mukul Sah
相关产品推荐
相关产品推荐

