当前位置: 首页 > 面试题库 >

是否检测套接字挂起而不发送或接收?

朱渝
2023-03-14
问题内容

我正在编写一个TCP服务器,可能需要15秒钟或更长时间才能开始生成对某些请求的响应主体。如果响应需要几秒钟才能完成,则某些客户端希望在其末端关闭连接。

由于生成响应非常占用CPU,因此我宁愿在客户端关闭连接时立即停止任务。目前,直到我发送第一个有效载荷并收到各种挂断错误后,我才发现这一点。

如何检测对等端已关闭连接而没有发送或接收任何数据?这意味着recv所有数据都保留在内核中,或者send实际上没有数据传输。


问题答案:

我经常遇到与具有单独TCP链接进行发送和接收的设备通信的问题。基本问题是,当您尝试读取时,TCP堆栈通常不会告诉您套接字已关闭-
您必须尝试写入以告知链接的另一端已断开。部分地,这就是TCP的设计方式(读取是被动的)。

我猜布莱尔的答案适用于套接字在另一端被很好地关闭的情况(即,他们已经发送了正确的断开连接消息),但是在另一端不礼貌地只是停止监听的情况下却没有。

在邮件的开头是否有一个固定格式的标头,可以在整个响应准备好之前从发送开始?例如XML文档类型?您还能在消息中的某些位置发送一些额外的空格吗—只是输出一些空数据以确保套接字仍处于打开状态,您还能避免这种情况吗?



 类似资料:
  • 我正在研究一个刮刀,它通过Chrome延伸部分工作。它抓取页面上的所有超文本标记语言,并将其发送到过滤和保存数据的python代码。我这样做刮擦的原因是因为网站有蒸馏网络和一个“传统”刮刀被阻止。 我成功地连接了这两个代码,但每当我尝试向python服务器发送“Test”时,它只输出浏览器的标题。 b'GET/HTTP/1.1主机:localhost:18364连接:升级Pragma:no-cac

  • 问题内容: 我正在建立一个客户-服务器项目。 我需要的是客户端发送一个字符串,例如“ Pendu”,服务器接收该字符串并将一个名为“ Pendu”的对象发送回客户端。 这是我的代码: 该类在包中定义: 我的问题是: 首先,我执行服务器,然后看到控制台中显示的内容。 然后我执行客户端,在控制台中,我收到如下消息: 同时,服务器端未显示任何新内容。 现在,我停止客户端,并显示服务器的所有其他消息: 当

  • 问题内容: 我如何使用getOutputStream方法发送一个strin。正如他们提到的,它只能发送字节。到目前为止,我可以发送一个字节。但不是字符串值。 提前致谢 问题答案: 如何使用PrintWriter: 编辑 :找到了我自己的答案,看到讨论了一个改进,但未列出。这是使用OutputStreamWriter编写字符串的更好方法:

  • 我试着做一个简单的服务器-客户机套接字通信,但服务器似乎无法正常工作。无论何时发送或接收,我都会收到此错误: 非插座上的插座操作:非插座上的插座操作 奇怪的是,这只会在服务器发送时出现。客户似乎还可以:

  • 关于 我想知道是否可以对来自的输出流或输入流执行单独的关闭。我知道,网络流可以与但是,我仍然在计算关闭()它的入站或出站部分,而不关闭整个网络流。 这可以通过更基本的类,在该类中,我可以首先发送数据,然后使用,同时保持输入流打开,直到我用。 参考链接: 系统上的MSDN。网插座关机() 系统上的MSDN。网TCP客户

  • 问题内容: 我根本不是Java程序员。我尽力不惜一切代价避免使用它,但是(在学校的意义上)我必须在课堂上使用它。老师要求我们使用Socket(),BufferedReader(),PrintWriter()和其他各种东西,包括BufferedReader()的readLine()方法。 基本上,这就是我遇到的问题。该文档明确指出,readLine应该在输入流的末尾返回null,但这不是正在发生的事