- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试为我的简单 Mono HTTP 服务器添加 HTTPS 支持。它在大多数情况下工作得很好,但是当发生 SSL 异常时应用程序崩溃,例如客户端取消握手。显然,类似的事情不应该让它完全崩溃,所以我需要以某种方式捕获该异常。
代码:
static void Main(string[] args)
{
try
{
var listener = new HttpListener();
string prefix = "https://*:8443/";
listener.Prefixes.Add(prefix);
Console.WriteLine("Starting HTTP server at " + prefix);
listener.Start();
while (true)
{
try
{
var context = listener.GetContext();
Console.WriteLine(context.Request.Url);
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Exception processing request: " + e);
Console.ResetColor();
}
}
}
catch (Exception e)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Exception caught! " + e);
}
}
这是当我遇到一个不稳定的客户端尝试连接时的日志:
Starting HTTP server at https://*:8443/
Unhandled Exception:
System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: The client stopped the handshake.
at Mono.Security.Protocol.Tls.SslServerStream.EndNegotiateHandshake (IAsyncResult asyncResult) <0x41e581b0 + 0x0022b> in <filename unknown>:0
at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) <0x41e57d20 + 0x00086> in <filename unknown>:0
--- End of inner exception stack trace ---
at Mono.Security.Protocol.Tls.SslStreamBase.EndRead (IAsyncResult asyncResult) <0x41e50110 + 0x0015f> in <filename unknown>:0
at Mono.Net.Security.Private.LegacySslStream.EndAuthenticateAsServer (IAsyncResult asyncResult) <0x41e50000 + 0x0003e> in <filename unknown>:0
at Mono.Net.Security.Private.LegacySslStream.AuthenticateAsServer (System.Security.Cryptography.X509Certificates.X509Certificate serverCertificate, Boolean clientCertificateRequired, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation) <0x41e40990 + 0x00055> in <filename unknown>:0
at System.Net.HttpConnection.Init () <0x41e3e0e0 + 0x0005f> in <filename unknown>:0
at System.Net.HttpConnection..ctor (System.Net.Sockets.Socket sock, System.Net.EndPointListener epl, Boolean secure, System.Security.Cryptography.X509Certificates.X509Certificate cert) <0x41e3b670 + 0x003e7> in <filename unknown>:0
at System.Net.EndPointListener.OnAccept (System.Object sender, System.EventArgs e) <0x41e3b210 + 0x002a7> in <filename unknown>:0
at System.Net.Sockets.SocketAsyncEventArgs.OnCompleted (System.Net.Sockets.SocketAsyncEventArgs e) <0x41e3b1d0 + 0x0002e> in <filename unknown>:0
at System.Net.Sockets.SocketAsyncEventArgs.Complete () <0x41e3b1b0 + 0x00013> in <filename unknown>:0
at System.Net.Sockets.Socket.<AcceptAsyncCallback>m__0 (IAsyncResult ares) <0x41e3aa70 + 0x0037f> in <filename unknown>:0
at System.Net.Sockets.SocketAsyncResult+<Complete>c__AnonStorey0.<>m__0 (System.Object _) <0x41e3a980 + 0x0001d> in <filename unknown>:0
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () <0x7f22cac25460 + 0x0002f> in <filename unknown>:0
at System.Threading.ThreadPoolWorkQueue.Dispatch () <0x7f22cac239e0 + 0x001d6> in <filename unknown>:0
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () <0x7f22cac252e0 + 0x00008> in <filename unknown>:0
最佳答案
这不是一个解决方案,但我能够通过使用 nginx 创建本地反向代理并将单服务器设置为仅监听 127.0.0.1 来解决该问题
关于c# - 如何在 Mono HTTPListener 服务器中捕获 SSL 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39604945/
我一直在 Windows 服务应用程序中放置一个小型嵌入式 HTTP 服务器,用于监听来自网络上使用 HTTP 的其他设备的更新。 对于每个 HTTP 请求,处理请求/响应的代码会执行两次,我希望它只
我正在开发一个迄今为止使用 HttpListener 来提供小型独立 http 服务器的应用程序。但是,我最近发现 HttpListener 需要以管理员身份运行,这并不总是可行的。 最好的选择是什么
我正在开发一个具有 HttpListener 的应用程序。我的目标是让用户根据自己的选择关闭和打开监听器。我将 Listener 放在一个新线程中,但在中止该线程时遇到问题。我在某处读到,如果您尝试中
我创建了简单的 HttpListener 来监听端口 9090 并根据请求的 URL 将一些信息写入控制台。 但我卡住了 :( 我想到了多线程、基于事件的系统,但我没有设法用它做任何事情。 这是我作为
我正在编写一个控制台应用程序作为 httplistener 并通过 jquery 使用它,它的工作完全正确,但我想将其转换为 https,但我不知道步骤 这是我的代码希望大家能尽快解决 这是在 JSc
我的 c# httplistener 仅在我在本地网络中发送请求时捕获请求(来自使用本地 ip 的同一 wifi 上的机器)。 当我查看我的公共(public) ip(在 google 中使用“我的
我正在制作一个简单的网络服务器来提供 html、css、js 和图像(在 c# 中完成)。我正在使用 HttpListener,我可以让 html、javascript 和 css 文件正常工作。我只
我尝试在不使用 IIS 的情况下设置 Web 服务。 我知道我们可以使用 HttpListener 来创建简单的 http 服务器。我想知道它现在是否已被弃用,因为 WCF 似乎提供了更多高级功能。
我有一个应该监听 HTTP 请求的 Windows 服务。为此,我正在使用 HttpListener。该服务已成功完成其工作。但是,当服务设置为在系统启动时自动启动时,我的 HTTP 初始化有延迟。
我有一个基于 HttpListener 的小型本地 Web 服务器。服务器提供文件给本地客户端应用程序解包并写入文件到 response.OutputStream; 但有时文件(视频)很大,我不认为总
我正在通过尝试获取一个打开的随机端口(或一个不在 IpGlobalProperties.GetActiveTcpConnections() 中的端口)来创建一个 HttpListener。我遇到的问题
我正在开发一个广泛使用 HttpListener() 的应用程序。到目前为止,我一直在实际网络上进行所有测试,但我现在对此感到厌烦。 我用正确的端口尝试了通常的嫌疑人(本地主机,127.0.0.1),
我正在使用这段代码来实现 Http 服务器: public Server() { _httpListener = new HttpListener(); _ht
我必须实现一个小型 REST 服务器来管理远程数据库,没什么特别的。安全性不是关键问题,因为此服务器必须在 Intranet 环境中运行;我们只想过滤用户并将他们重定向到适当的资源。
我有几个 HttpListener 服务在同一台机器上使用不同的 URI(同一端口)。有没有办法让一个进程检测哪些其他服务正在运行并在同一台机器上注册为 HttpListeners?他们都共享这样的公
我正在编写一个类似于 HFS 的应用程序,它是一个 HTTP 文件服务器,在 HTML/CSS/JS 中具有自定义主题,我我希望能够在多个部分提供我的文件,因为大多数下载管理器通过多个连接连接到服务器
好吧,这是一个很长的问题,但我认为这是值得的。我们拥有的: 一个示例虚拟 C# 控制台应用程序,启动自托管的 owin ASP.Net WebAPI 服务(Microsoft.AspNet.Web
我必须建立一个 HttpListener 来等待客户端服务器发出的请求。我必须在端口 8088 上接收该请求并提取查询字符串。这是简单的部分。 我在 Windows 服务中运行 HttpListene
这个问题在这里已经有了答案: Handling multiple requests with C# HttpListener (3 个答案) 关闭 8 年前。 我有这个 HttpListener,它
我在这里遇到一个问题,与 HttpListener 有关。 当一个请求的形式 http://user:password@example.com/ 制作完成,如何获取用户名和密码?HttpWebRequ
我是一名优秀的程序员,十分优秀!