You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:21:08