【问题标题】:Is it possible to keep sockets open infinite time是否可以无限期保持套接字打开
【发布时间】:2012-06-13 15:52:52
【问题描述】:

我是网络编程的新手。我很感兴趣是否可以通过 Java 服务器和 C 客户端之间的套接字建立网络连接并保持连接无限打开? 我想保持连接打开以在客户端之间交换 XML 数据。

【问题讨论】:

  • “保持连接无限打开?” 遗憾的是没有。再过几亿年,地球就会蒸发。
  • 不,宇宙最终会结束 :-) 更实际的一点是,一段时间后,由于网络问题,连接可能会断开并且必须重新建立。跨度>
  • 也许您的意思是“持久”而不是“无限”? “无限”在 Stackoverflow 中展现了愤世嫉俗的一面。 :P
  • @kevin628 不管怎样,这是一个奇怪的问题。

标签: java c sockets network-programming


【解决方案1】:

理论上可以无限期地保持服务器套接字打开;但是,客户端套接字不能这样做。主要原因是客户端socket依赖于服务端socket处理数据,而服务端socket可能会关闭连接。

虽然可以无限期地保持连接打开,但实际方面通常会确保此类套接字不会永远保持打开状态。网络中断、中间路由器配置错误、带宽耗尽、计算能力不足等,所有这些都共同确保点对点连接充其量只是暂时的。

请注意,服务器端套接字是接收连接请求的套接字(产生具有自己的返回套接字的连接),因此即使没有连接也可以打开它。如果您将套接字视为与另一台计算机的开放连接,则需要重新调整思路,让服务器套接字有意义。

【讨论】:

  • 别忘了处理上面指出的那些讨厌的EarthVaporizedExceptionUniverseHasEndedException
  • @LucaGeretti 这样的评论很有趣,但实际上你只是在回避回答这个问题。 Stackoverflow 并不是意味着无聊,但包括宇宙热寂在内的答案在非通用时间尺度上是没有用的。
  • 您第一段中描述的问题不仅限于客户端套接字。它是对称的。任何一方都可以断开连接,任何中间节点也可以。
  • @EJP 如果客户端断开连接,服务器套接字不会关闭。服务器套接字上的所有连接都可能丢失,但套接字本身仍然存在。
  • 那么在需要reconnection 之前,理想情况下套接字应该保持打开多长时间? (我对套接字还是很陌生)
【解决方案2】:

没有什么是无限的(在计算中),但只要两个应用程序都在运行,您就可以保持套接字连接打开。

【讨论】:

    【解决方案3】:

    这与其说是一个答案,不如说是一个请求,但作为用户,我发现套接字一直掉线。你不能让它们无限期地打开。当一个套接字意外关闭时,请 (A) 让用户知道连接已被删除,并且 (B) 让 真正 轻松地重新建立 same 连接。好的,这涉及到游戏,但我有一些客户不承认服务器已消失,而服务器则不承认我与连接断开的那个人是同一个人。

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 2014-06-02
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多