- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有以下问题:
1) TCP 是否保证数据包的传送,因此如果使用的传输协议(protocol)是 TCP,则是否需要应用程序级重传。假设我已经在客户端和服务器之间建立了 TCP 连接,服务器向客户端发送了一条消息。然而,客户端离线并在大约 10 小时后才恢复正常,那么 TCP 堆栈是否会处理重新传输和向客户端传递消息,或者服务器上运行的应用程序是否需要处理它?</p>
2) 与上述问题相关,如果传输协议(protocol)是 TCP,是否需要应用程序级别的 ACK。应用程序 ACK 的原因之一是,如果没有它,应用程序将不知道远程端何时收到消息。除此之外还有什么原因吗?意思是消息本身的传递是有保证的吗?
最佳答案
Does TCP guarantee delivery of packets and thus is thus application level re-transmission ever required if transport protocol used is TCP
TCP 保证将消息流字节传送到 TCP 连接另一端的 TCP 层。因此,应用程序不必为重传的细微差别而烦恼。但是,在将其视为绝对答案之前,请先阅读我的其余答案。
However the client goes offline and comes back only after say 10 hours, so will TCP stack handle re-transmission and delivering message to the client or will the application running on the server need to handle it?
不,不是真的。尽管 TCP 对单个 TCP 数据包具有某种程度的重试逻辑,但如果远程端点断开连接,它也无法执行重新连接。换句话说,它最终会“超时”等待从远程端获得 TCP ACK 并进行几次重试。但最终会放弃并通过套接字接口(interface)通知应用程序远程端点连接处于死或关闭状态。典型的模式是,当客户端应用程序检测到它丢失了与服务器的套接字连接时,它要么向应用程序的用户界面报告错误,要么重试连接。无论哪种方式,都是应用程序级别决定如何处理失败的 TCP 连接。
is application level ACK needed if transport protocol is TCP
是的,绝对是。大多数客户端-服务器协议(protocol)都有一些请求/响应消息对的概念。如果应用程序“发送”的数据已成功排队到内核的网络堆栈,则 TCP 套接字只能向应用程序指示。它不保证远程端套接字之上的应用程序实际上“得到它”或“处理它”。 TCP 之上的协议(protocol)应该在处理消息时提供某种响应指示。此处以 HTTP 为例。想象一下,如果应用程序向服务器发送 HTTP POST 消息,但没有来自服务器的确认(例如 200 OK)。客户端如何知道服务器处理了它?
在网络地址转换器 (NAT) 和代理服务器的世界中,空闲的 TCP 连接(彼此之间没有数据)可能会失败,因为 NAT 或代理会代表实际端点关闭连接,因为它认为缺少正在发送的数据。解决方案是使用某种周期性的“ping”和“pong”协议(protocol),应用程序可以通过这些协议(protocol)在没有数据可发送的情况下保持 TCP 连接有效。
关于sockets - 是否需要通过 TCP 进行应用程序级重传和确认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44255697/
TCP header 上的 32 位确认字段,比如 x告诉另一台主机“我收到了所有字节,直到并包括 x-1,现在期待来自 x 和 on 的字节”。在这种情况下,接收方可能已经收到了一些更多字节,比如
我正在使用 PyCharm 2020.2.3 不知不觉中我点击了下图中的复选框 现在,即使我的代码正在调试中,点击运行也会终止调试并开始运行代码。如何将其恢复为未选中状态?谢谢。 PS:我的“允许并行
我想知道何时使用 RabbitMQ 和 Spring Boot 接受 (ack) 或不接受 (nack) 消息。 我想将消息发送到队列(通过交换)并检查队列是否已接受该消息。实际上我想发送到两个不同的
我一直在寻找一种方法让用户确认 票在分配给他们之后。不知道有没有 这是一个内置功能,或者如果有一个插件 将为用户创建一个状态/按钮以接受票证 在它被放入队列之后。我希望 从附近的售票窗口看到类似的东西
我正在构建一个应用程序以通过 Xbee API 与 Xbee 模块通信。 目前我有一些工作,但它相当简单并且有很多限制。 Sub processPackets() ' this runs as its
我有一个复选框,更改后会自动发布。 自动发布对于两者(选中和未选中)都适用,但我想在每个事件发生之前弹出一个对话框进行确认。 到目前为止,当选中该复选框时,弹出框就会起作用。 但当取消选中该复选框时,
当我使用 UIGestureRecognizer ,例如,当用户向右滑动时,我想要一个 UIAlertView询问他是否真的要进行向右滑动的 Action 。 我曾尝试这样做,但没有成功。 最佳答案
我有一个 asp:CheckBoxList,我想显示一条警告消息仅在使用 jquery 取消选中复选框时。 $('.chklist').click( function () {
我想知道有什么可能的方法来确定我们的推送消息是否最终从 APNS 服务器传送。我已经想出了一些信息,如下所述 APNS 正在发送接受推送请求的响应代码,并可能给出错误代码(如果有)。例如:如果您的有效
我有此页面,我正在尝试确认输入文本字段中的日期与当前日期。如果输入字段中的日期晚于当前日期,则需要出现确认框以确认他们输入了正确的日期。因此,“确定”按钮需要完成数据提交,“取消”按钮需要将它们返回到
我有一个功能: function placeOrder(price, productList) { var bulletinBoardItem = Number(productList.box
我不明白为什么即使我点击“否”,这个confirm()调用也会被触发。你能告诉我我做错了什么吗? $('.deleteButton').livequery('click',function(){
我目前正在使用 dotmailer 生成一个新表单(简单的文本框和提交按钮),自动将电子邮件地址添加到 dotmailer 地址簿。 当有人提交电子邮件地址时 - 他们可以被带到网页。 我一直在尝试
这是不起作用的代码...它只是删除表单而不先提示。 $(".delete").click(function () { if(confirm('You honestly want to dele
我在我的程序中使用 aprgeparse 创建一个参数,允许用户从 amazon s3 存储桶中删除文件。我以这种方式创建它: parser.add_argument("-r", "--remove"
我正在努力学习 puppeteer 操作。我已经成功编写了登录页面和一些导航的脚本。然后我让它点击一个按钮。该页面抛出一个 window.confirm,我希望我的脚本接受它以继续下一步,但我不知
某网站实现了一个第三方插件,提示用户在删除前进行确认。 confirmDelete: function (event) { var go_ahead = confirm("Are you su
我想在 primefaces 的选择/取消选择复选框上显示确认对话框。我试过了 但它不起作用,因为 selectBooleanCheckBox 不可确认。是否有解决此问题的解决方法? 最
我们已经从 TFS 下载了一个项目,在恢复 Nuget 包后,我们收到以下错误: Error 5 The "ValidatePackageReferences" task could not
我有两个单独的 ul 列表:列表 A 和列表 B 由于 jQuery UI 插件,它们都可以排序。 我正在开发的项目的用户希望在项目从一个列表移动到另一个列表时确认操作,但在同一列表内移动时则不需要。
我是一名优秀的程序员,十分优秀!