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

如何让控制台程序成为HTTPS监听器?解决连接重置错误

解决HttpListener切换HTTPS后出现“err connection reset”的问题

仅修改HttpListener的前缀为HTTPS是不够的,HTTPS需要SSL证书绑定到指定端口才能正常工作,以下是完整解决步骤:

1. 生成/获取SSL证书

测试环境下可通过PowerShell生成自签名证书:

New-SelfSignedCertificate -DnsName "192.168.0.22" -CertStoreLocation "cert:\LocalMachine\My"

执行后复制返回结果中的Thumbprint值(去掉所有空格)。

2. 将证书绑定到目标端口

以管理员身份打开命令提示符,执行以下命令(替换<证书Thumbprint>为刚才复制的值,appid可任意生成一个GUID,比如{12345678-1234-1234-1234-1234567890AB}):

netsh http add sslcert ipport=192.168.0.22:7214 certhash=<证书Thumbprint> appid={12345678-1234-1234-1234-1234567890AB}

若提示端口已绑定,可先执行netsh http delete sslcert ipport=192.168.0.22:7214清除旧绑定。

3. 修改代码并确保运行权限

将代码中的前缀改为HTTPS,同时必须以管理员身份运行控制台应用,否则HttpListener无法获取HTTPS绑定权限:

class Program
{
    static void Main(string[] args)
    {
        string logFilePath = "log.txt";
        using (StreamWriter logWriter = new StreamWriter(logFilePath, false))
        {
            try
            {
                var listener = new HttpListener();
                // 替换为HTTPS前缀
                listener.Prefixes.Add("https://192.168.0.22:7214/");
                listener.Start();
                Console.WriteLine("HTTPS服务已启动,等待请求...");

                while (true)
                {
                    var context = listener.GetContext();
                    ProcessRequest(context, logWriter);
                }
            }
            catch (Exception ex)
            {
                logWriter.WriteLine($"错误: {ex.Message}");
                logWriter.WriteLine($"调用栈: {ex.StackTrace}");
                logWriter.Flush();
                Console.WriteLine($"启动失败: {ex.Message}");
            }
        }
    }

    // 补充请求处理方法示例
    private static void ProcessRequest(HttpListenerContext context, StreamWriter logWriter)
    {
        string responseString = "<html><body>HTTPS请求已处理</body></html>";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
        context.Response.ContentLength64 = buffer.Length;
        System.IO.Stream output = context.Response.OutputStream;
        output.Write(buffer, 0, buffer.Length);
        output.Close();
        
        logWriter.WriteLine($"已处理请求: {context.Request.Url}");
        logWriter.Flush();
    }
}

4. 检查防火墙设置

确保Windows防火墙(或第三方防火墙)允许7214端口的HTTPS(TCP)流量通过,否则外部请求会被拦截。

常见问题排查

  • 若listener.Start()抛出“访问被拒绝”异常:确认应用以管理员身份运行,或检查端口绑定权限。
  • 若抛出“找不到证书”异常:检查certhash是否正确,证书是否存储在LocalMachine\My目录下。

内容的提问来源于stack exchange,提问作者omercan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:40