C# 客户机-服务器问题

C# 客户机-服务器问题,c#,multithreading,C#,Multithreading,如果我有一个连接到服务器的客户机,并且如果服务器崩溃,我如何确定连接是否关闭,并形成我的客户机?其思想是,如果在客户端的while中,我等待从服务器读取一行(String a=sr.ReadLine();),而当客户端等待接收该行时,服务器崩溃,如何关闭包含while的线程 许多人告诉我,在while(alive){..}中,我应该将alive值更改为true,但是如果我的程序当前正在等待一行读取,它将无法退出while,因为它将被困在sr.ReadLine()中 我在想,如果我不能向服务器发送

如果我有一个连接到服务器的客户机,并且如果服务器崩溃,我如何确定连接是否关闭,并形成我的客户机?其思想是,如果在客户端的
while
中,我等待从服务器读取一行(
String a=sr.ReadLine();
),而当客户端等待接收该行时,服务器崩溃,如何关闭包含
while
的线程

许多人告诉我,在
while(alive){..}
中,我应该将alive值更改为true,但是如果我的程序当前正在等待一行读取,它将无法退出while,因为它将被困在
sr.ReadLine()


我在想,如果我不能向服务器发送一行代码,我应该用
.abort()
关闭客户端线程。有什么想法吗

ReadLine
方法中有一个
TimeOut
参数,该参数采用
TimeSpan
值,如果未收到响应,则在该间隔后超时

public string ReadLine(TimeSpan timeout)
{
   // ..your logic.
)
例如,请检查这些SO帖子-


ReadLine
方法中有一个
TimeOut
参数,该参数采用
TimeSpan
值,如果未收到响应,则在该间隔后超时

public string ReadLine(TimeSpan timeout)
{
   // ..your logic.
)
例如,请检查这些SO帖子-


服务器应用程序是您自己的还是现成的


如果是你的,每隔几秒钟发送一次“心跳”,让客户端知道连接和服务仍然有效。(这比仅仅查看连接是否关闭要可靠一些,因为在服务器应用程序被锁定时,连接可能保持打开状态。)

服务器应用程序是您自己的还是现成的


如果是你的,每隔几秒钟发送一次“心跳”,让客户端知道连接和服务仍然有效。(这比仅仅查看连接是否关闭要可靠一些,因为在服务器应用程序被锁定时,连接可能保持打开状态。)

如果服务器崩溃,我想你会遇到比修复while循环更多的问题。由于其他原因,您的程序可能会进入不稳定状态。国家不应被忽视。也就是说,一条漂亮的“服务器超时”消息就足够了。您可以更进一步并ping,然后给出更高级的消息“服务器似乎已关闭”

如果服务器崩溃,我想你会遇到比修复while循环更多的问题。由于其他原因,您的程序可能会进入不稳定状态。国家不应被忽视。也就是说,一条漂亮的“服务器超时”消息就足够了。您可以更进一步并ping,然后给出更高级的消息“服务器似乎已关闭”

服务器崩溃与您的客户端无关。有几个外部因素会导致连接中断:客户端是其中之一,internet/lan问题是另一个

无论什么原因失败,服务器都应该处理它。服务器宕机会让用户尖叫;)


关于多线程,我建议您看看BeginXXX/EndXXX异步方法。它们为您提供了更强大的功能和更强健的解决方案。

服务器崩溃与您的客户端无关。有几个外部因素会导致连接中断:客户端是其中之一,internet/lan问题是另一个

无论什么原因失败,服务器都应该处理它。服务器宕机会让用户尖叫;)


关于多线程,我建议您看看BeginXXX/EndXXX异步方法。它们为您提供了更强大的功能和更健壮的解决方案。

尽量避免任何依赖于线程中止()的策略。如果无法避免,请确保您了解该机制的惯用用法,其中包括使用单独的appdomain并捕获ThreadAbortException

尝试避免任何依赖thread abort()的策略。如果你无法避免它,请确保你理解该机制的惯用用法,其中包括拥有一个单独的appdomain并捕获ThreadAbortException

你手头有这样的示例吗?请参阅更新的答案,我刚刚发现一些SO帖子提供了很好的示例。你手头有这样的示例吗?请参阅更新的答案,我刚刚发现一些非常好的例子,你是说“心跳”吗?这是我老板最喜欢的流行语/阶段之一。你是说“心跳”吗?这是我老板最喜欢的流行语/阶段之一。