【问题标题】:How can I simulate a socket disconnection?如何模拟套接字断开连接?
【发布时间】:2011-09-13 11:08:50
【问题描述】:

我的应用程序将文件上传到客户端的服务器,但他想要特殊的“暂停上传”功能。我不能简单地关闭连接,甚至不能杀死进程 - 他需要失去连接,否则他的服务器应用程序会删除未完成的文件 - 所以我必须在代码中模拟“电缆拔出” - 你有什么建议吗? 谢谢你的帮助,对不起我的英语:) 吉尔卡

【问题讨论】:

  • 您必须停止发送数据并停止发送到达数据的确认(我认为这对于 Java 的套接字实现是不可能的,因为这是由操作系统完成的),然后等待足够长的时间以便超时在服务器端触发。
  • 使用防火墙设置(iptables 或 windows 防火墙)或者只是拔掉电缆,关闭无线路由器,或者发送 RST 信号。您可以在 Windows 上使用 TCPView 轻松完成。
  • @PaŭloEbermann,这不起作用,因为超时时间足够长(比如 2 小时)和/或他们启用了 KEEP_ALIVE。
  • @bestsss 好主意,但如果您想进行自动测试,主要是在 Windows 上,这会很棘手。
  • @PaoloVictor,使用 WinPCap 发送 RST 并不难,不知道是否有库/应用程序可以这样做。

标签: java sockets tcp


【解决方案1】:

您可以使用Mockito 为您的单元测试创​​建一个Socket 模拟,如以下问题所示:Testing Java Sockets

【讨论】:

    【解决方案2】:

    如果您同时编写了客户端和服务器,也许更好的选择是发送一些OOB data 来告诉服务器您正在暂停(或者一条消息告诉服务器不要在下一个套接字关闭时删除文件) .通常最好是明确而不是依赖某些操作的副作用 - 在您的情况下,关闭套接字而不明确 connection termination

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 2019-03-05
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      相关资源
      最近更新 更多