我该怎么办?关闭插座?我无法看到问题,谷歌没有帮助 什么可能导致此错误?据我所知,这是系统类型异常。
Console.WriteLine("Connection Recieved");
while (true)
{
var handler = socket.Accept();
try
{
while (handler.Connected)
{
var x = new byte[200000];
try
{
handler.Receive(x);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.InnerException);
Console.WriteLine(ex.StackTrace);
}
var command = new string(Encoding.UTF8.GetChars(x.Where(t => t != 0).ToArray()));
if (string.IsNullOrEmpty(command))
{
break;
}
var data = (Dictionary<string, object>)JsonConvert.DeserializeObject(command, (typeof(Dictionary<string, object>)));
if (data["command"].ToString() != "getLog") continue;
var response = GetStatus();
handler.Send(Encoding.UTF8.GetBytes(response));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.InnerException);
Console.WriteLine(ex.StackTrace);
}
}
答案 0 :(得分:1)
井&#34;具有多层协议的良好抽象网络&#34;在处理各种断开连接时(软瞬态:例如,超时,可恢复:例如,超出预付费数据计划限制,瞬态硬件:纤薄脆弱的lenovos rj45插孔松动,无法恢复的硬件)......
是一个很难的问题,因为库和开发人员以及最终用户对于依赖于lib或app的类型或涉及的用法的错误条件有不同的需求。
约翰·卡马克(John Carmack)刚发布了一些关于&#34;抽象的内容。但是在网络中,每个人重新实现TLS或其他什么都是不合理的。可以看看什么类型的接口是实用的(一些C人可能因为这些错误流问题而反对流)...以及错误和警告如何在运行时流动,并且库编写者可以为编译器添加提示&# 34;编译器流程&#34;在开发过程中,开发人员会收到警告,警告哪些类型的错误可能会从较低级别传播,如果存在,则通过抽象传播。多个返回值为错误,状态,警告传播提供了一种方法,但异常的支持者认为异常在不抛出时更快,但这可能归结为语言和编译器实现 - 例如。 jit可以转向在热循环中使用异常并将异常转换为传播错误等。
当开始使用C#时,我遇到的第一件事就是如何处理所有可能的断开连接并发现...是的BCL / C#看起来不错但是devil在细节和令人惊讶的运行时异常中是不同的并弹出来自不同地方,取决于超时/断开连接/ cable-unplug / hw-fault等可能是语言和库可以用作&#34;用例&#34;围绕它来构建语言和标准库(以及错误,状态等流程范例),以便他们的用户更好地了解这些,而不必猜测它可能支持哪个错误或异常。现在尝试提前添加错误处理是很困难的,其中一些条件越来越不特别(笔记本电脑中的小故障rj45端口 - 大部分时间都可以工作) - 或者像Surface Books可拆卸显示器那样从一个GPU过渡到另一个等等。
这个东西很难,抽象常常让它变得更糟,但我们还需要一些抽象(比如网络协议等)。
事实上,这个东西太难了,如果你找到它,就没有用#34来表达它的全部内容;如何让那些不是John Carmack级别的人做得更好程序员&#34 ;.我看到一个演示文稿表明函数式编程可以有一些答案,但它并没有深入到网络中可能发生的所有事情,所以我不能100%确信这是答案,但它是“sa”启动。
那是我看到的演示文稿但是,是的,这个模型能否适用于我根据需求概述的所有内容(可能更多)?