【问题标题】:How to properly handle "existing connection forcibly closed"如何正确处理“强行关闭现有连接”
【发布时间】:2014-07-04 05:11:11
【问题描述】:

我创建了一个多线程 TCP 服务器。当客户端断开连接时,我会收到

“现有连接被远程主机强行关闭”错误。

除了捕获错误之外,处理远程客户端断开连接的最佳方法是什么?

【问题讨论】:

  • ...这完全取决于当客户端意外断开连接时您的服务器应该做什么(或不应该做什么)。告诉我们,并向我们展示到目前为止您为实现服务器的预期行为所做的尝试...
  • @elgonzo 当客户端断开连接时,我希望服务器放弃连接。没有错误。
  • 从你的问题我推断你已经能够捕捉到错误。是什么阻止您在捕获错误时丢弃此连接(无论您理解为“丢弃”)?
  • @elgonzo - 什么都没有,这就是我目前正在做的事情。我想知道除了简单的捕获之外是否还有更“正确”的方法来处理这个问题。 =D
  • 您提出问题的方式更像是邀请您参加某种基于意见的讨论 - SO 不适合。如果您的代码有具体问题,那么 SO 是正确的地方。很可能有人可以想出不同的方法来处理意外的客户断开连接,可能所有这些方法都以自己的方式“正确”——但正如所说,这将是基于意见的讨论,并不真正适合问题- 答案格式,如 SO。长话短说——如果你的代码正确地做你想做的事,那么别担心:)

标签: c# .net multithreading networking tcp


【解决方案1】:

假设您的服务器正在处理连接以等待传入数据:

当您从 Socket 或 NetworkStream 读取时,Read 函数将返回 0,这清楚地表明您已与远程客户端断开连接。

NetworkStream in = ...; 
...
readed = await in.ReadAsync(buffer, count, available);
if( readed == 0 ){
   // we are disconnected.
}

【讨论】:

  • 当客户端断开连接时,我希望服务器丢弃连接。没有错误。
猜你喜欢
  • 2014-01-12
  • 2011-10-20
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2014-07-13
  • 2015-11-20
  • 1970-01-01
相关资源
最近更新 更多