.净HttpListener:在注册时HTTP&HTTPS我得到"冲突与一个现有登记的机器"

StackOverflow https://stackoverflow.com/questions/2619251

  •  26-09-2019
  •  | 
  •  

我试图使用。净HttpListener在C#项目。当我注册前缀"http://*:8080/"似乎不到工作HTTPS网址(即不捡起来).当我试着以下代码,登记册都HTTP及HTTPS版本的前缀但是我得到的错误:

"没有听上前缀以'https://:8080/',因为它冲突与一个现有登记的机器。"*

如何可以得到我的工作前缀为HTTP&HTTPS?

    private HttpListener _listener;

    // Create prefixes
    var prefixes = new List<string>();
    prefixes.Add("http://*:8080/");
    prefixes.Add("https://*:8080/");


    // Create HttpListener
    _listener = new HttpListener();
    foreach (string prefix in prefixes)
    {
        _listener.Prefixes.Add(prefix);
    }

    _listener.Start();   // <== ERROR HERE

编辑1-额外的澄清:

  • 该节目是作为一个当地代理的电脑应用程序使HTTP(S)电话。
  • 使用的是因此根据不断变化的人浏览器代理设置指向这个地方的家长代理服务器(例如localhost:8080)
  • 这意味着因此(I假设),HttpListener有听HTTP和HTTPS通信在这个相同的地方港口(例如8080).
  • 目标:试图找到一种方式为我的节目听到的两HTTP及HTTPS在同一口.

感谢

有帮助吗?

解决方案

目标:试图找到一种方法对于我的 节目听到的两HTTP及 HTTPS在同一港口。

你的 不能 这样做HTTPListener.你只需要使用一个 TCPListener 和处理每个响应有条件地取决于它是否HTTP或HTTPS。

我敢肯定如果您使用的一个HTTPListener HTTP8080和一个用于HTTPS8443你应该能够使浏览器使用yourproxy:8080HTTP和yourproxy:8443于HTTPS。Firefox肯定让你这样做。

其他提示

默认情况下,https使用港口443相当于80。你有指定的不同港口不同的协议李斯特.

这听起来非微不足道,但不是不可能的。你会需要检查什么的客户发送,并决定,如果他们开始HTTP或HTTPS届会议根据数据他们的供应。

编辑:在思考这个更多一点的也许这不是你想要做什么给你写作代理。而你会需要处理的连接方法(见 http://www.ietf.org/rfc/rfc2817.txt)和开辟一个隧道连接的目标服务器。

"如果创建HttpListener使用https,你必须选择一个服务器证书的听众。否则,一个HttpWebRequest查询这HttpListener将失败,一个意想不到的紧密连接。" 这是从msdn的网站。(http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx) 也许问题在那里?

你是不是强迫使用相同的配置的所有协议。

打高级的代理设置的,在那里,你可以指定不同的代理设置的其他协议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top