问题标签 [disconnect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
10039 浏览

sockets - 在使用 NetworkStream 类时检测客户端 TCP 断开连接

有朋友来找我的一个问题:在连接的服务器端使用NetworkStream类时,如果客户端断开连接,NetworkStream检测不到。

精简后,他的 C# 代码如下所示:

该代码有效,因为客户端可以成功连接并且服务器可以读取发送给它的数据。但是,如果远程客户端调用 tcpClient.Close(),服务器不会检测到断开连接 - client.Connected 保持为真,而 ns.DataAvailable 为假。

对 Stack Overflow 的搜索提供了一个答案——因为没有调用 Socket.Receive,所以套接字没有检测到断开连接。很公平。我们可以解决这个问题:

(为简洁起见,我省略了异常处理代码。)

此代码有效,但是,我不会将此解决方案称为“优雅”。我知道的问题的另一个优雅解决方案是为每个 TcpClient 生成一个线程,并允许 BinaryFormatter.Deserialize (née NetworkStream.Read) 调用阻塞,这将正确检测断开连接。但是,这确实会产生为每个客户端创建和维护线程的开销。

我觉得我错过了一些秘密的、很棒的答案,它会保留原始代码的清晰度,但避免使用额外的线程来执行异步读取。虽然,也许 NetworkStream 类从来没有为这种用途而设计。任何人都可以解释一下吗?

更新:只是想澄清一下,我有兴趣看看 .NET 框架是否有一个解决方案,涵盖了 NetworkStream 的这种使用(即轮询避免阻塞)——显然可以做到;NetworkStream 可以很容易地包装在提供该功能的支持类中。看起来很奇怪,该框架本质上要求您使用线程来避免阻塞 NetworkStream.Read,或者窥视套接字本身以检查断开连接 - 几乎就像它是一个错误。或者可能缺少某个功能。;)

0 投票
4 回答
3972 浏览

networking - 如果没有数据,TCP 断开连接

我查看了 TCP 协议 Wiki,但没有发现,如果长时间没有数据传输,套接字连接是否会超时。我的意思是..不会有物理问题,但是两台计算机在一段时间内没有数据可以相互发送。如何连接仍然存在?会不会有一些低级的数据传输来帮助它理解它没有被破坏?

谢谢!对不起,如果问题很愚蠢..

0 投票
1 回答
2716 浏览

android - HttpURLConnection 断开连接在 Android 中不起作用

断开连接的方法HttpURLConnection似乎无法正常工作。如果我执行以下代码:

IllegalStateException当我调用该方法时,我得到一个setDoInput。异常说:

已经连接

0 投票
1 回答
1040 浏览

java - 检测客户端已与码头服务器断开连接(使用延续)

我正在使用码头延续,我想知道是否可以检测到客户端已与服务器断开连接(关闭与码头服务器的连接)。

谢谢,阿尔弗雷德

0 投票
2 回答
9453 浏览

winapi - 如何使用命名管道客户端/服务器检测客户端断开连接?

我正在学习命名管道,并正在使用 MSDN 文档中的命名管道客户端和服务器示例:

命名管道服务器

命名管道客户端

我修改了客户端,这样我就可以在控制台中输入消息并将它们发送到服务器,在那里它显示消息并发回回复。本质上,我添加了一个循环,它在 SetNamedPipeHandleState() 调用之后开始并在 CloseHandle() 调用之前结束(即打开和关闭发生在循环之外,所以我在循环中使用相同的管道句柄)。

我的问题是,如果我杀死客户端(通过关闭它或通过任务管理器结束它),服务器端有什么方法可以检测到断开连接?

我尝试过使用 GetNamedPipeHandleState(),希望它返回失败,而对 GetLastError() 的调用将返回 ERROR_PIPE_NOT_CONNECTED,但事实并非如此。由于此服务器的设置方式,我必须在 CompletedReadRoutine 函数中执行此操作并创建“受控”故障。我所做的是,在服务器的 CompletedReadRoutine 上有一个断点:

  1. 启动服务器
  2. 启动客户端
  3. 通过客户端发送消息(在此处命中服务器中的断点)
  4. 杀死客户
  5. 单步执行 GetNamedPipeHandleState

对 GetNamedPipeHandleState() 的调用成功返回,因此我从未进行 GetLastError() 调用。当它到达 WriteFileEx 调用时,它会失败,此时对 GetLastError 的调用会返回 ERROR_NO_DATA。

查看管道功能,我看不到任何其他可能有帮助的东西。我遗漏了一些东西,或者客户端断开连接只是无法检测到。

我能想到的唯一另一件事是收集连接客户端的 pid(通过 GetNamedPipeClientProcessId)并关闭看门狗线程以检查它们是否还活着。不过,一想到这样做就会引起我的蜘蛛侠感。

使用命名管道时有没有办法检测断开连接的客户端?

0 投票
4 回答
537 浏览

php - php - 断开并连接到多个数据库

我希望能够通过循环从当前数据库切换到多个数据库:

它确实从其他数据库插入和更新详细信息,但它也从当前用户数据库中插入和编辑我不想要的数据。有任何想法吗?

0 投票
2 回答
646 浏览

c# - Java Socket 断开连接报告与 C# 断开连接

在 C# 中,当套接字连接终止时,另一个节点会在终止链接之前收到通知,因此 remaning 节点可以更新连接状态。

在 Java 中,当我终止通信链接时,另一个节点不断报告连接为有效。

我是否需要实现一个读取周期(有意义),当它在读取期间收到 -1 时报告连接丢失(在 C# 中,我认为这是 0)?

感谢您的见解。

编辑:谢谢你们俩。正如我在帖子中怀疑并提到的那样,需要进行额外检查才能确认连接的连接状态。

0 投票
1 回答
2753 浏览

java - 使用enterprisedt的ftp java框架调用disconnect()时连接重置

我在使用enterprisedt java ftp 框架从 ftp 服务器断开连接时遇到问题。

我不能在 FileTransferClient 对象上调用 disconnect() 而不会出错。

除了连接到服务器然后断开连接之外,我什么都不做:

运行此程序时,日志显示:

和堆栈跟踪:

应该注意的是,我可以毫无问题地连接并使用服务器做一些事情,比如获取当前工作目录中的文件列表。但由于某种原因,我不能断开连接!我试过同时使用主动和被动模式。

上面的例子是从他们自己的例子中复制/粘贴的。我无法通过谷歌搜索找到与此相关的任何内容,所以我希望您有任何建议或对此问题的经验。

0 投票
2 回答
1507 浏览

error-handling - WCF net.tcp 服务器断开连接 - 如何在客户端正确处理?

我现在遇到了一个烦人的问题。我有一个 Silverlight 4 应用程序(默认运行 OOB)。它使用带有 net.tcp 的 WCF 作为与服务器通信的手段。客户端使用 wcf 客户端代理的中央实例。只要一切都在服务器端继续运行,一切都很好。

如果我在所有事情的中间杀死服务器,我就会淹没在客户端的大量异常中(连接丢失、通道故障等)。

现在我正在寻找一种以干净和集中的方式处理此问题的方法(如果可能的话)。

SL 应用程序有一个位于 App.cs 中的中央客户端对象 (public static MyClient Client { get;set;}),它在应用程序启动时被初始化。

知道如何正确处理客户端对象上的任何连接问题吗?

0 投票
2 回答
1839 浏览

c# - 如何断开蓝牙设备?

我有一个设备通过蓝牙主动连接到计算机。从我的 C#.NET 应用程序中,我希望断开设备,以便计算机不再连接到设备。

我该怎么做呢?

我猜这与找到合适的套接字并断开该套接字有关吗?(但这纯粹是冒险猜测,因为我对 Socket 连接一无所知。)

有任何想法吗?