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

查找是否通过tcp传递了消息

安经纶
2023-03-14
问题内容

通过TCP流发送()/ write()消息时,如何确定这些字节是否已成功传递?

接收方通过tcp确认接收到字节,因此发送方tcp堆栈应该知道。

但是当我send()一些字节时,即使无法发送数据包,send()也会立即返回,我在netcat上使用strace在linux
2.6.30上进行了测试,在发送一些字节之前先拔出网络电缆。

我只是在开发一个应用程序,在该应用程序中了解消息是否已传递非常重要,但是实现tcp功能(“确认消息#123”)感觉很尴尬,必须有更好的方法。


问题答案:

发送TCP确实知道另一端何时确认数据,但是这样做的唯一原因是,它知道何时可以丢弃数据(因为其他人现在负责将其发送到另一端的应用程序)。

它通常不提供此信息发送应用程序,因为(尽管外表),它不会真的 意味着 很多发送应用程序。确认并不意味着接收应用程序已获取数据并对其进行了明智的处理-
而是意味着发送方TCP不再需要担心它。数据可能仍在传输中-例如在中间代理服务器内,或在接收TCP堆栈内。

“成功接收到的数据”实际上是应用程序级的概念-
含义取决于应用程序(例如,对于许多应用程序,只有在接收到的数据已同步到磁盘后才考虑“已接收”数据才有意义)侧)。因此,这意味着您必须自己实现它,因为作为应用程序开发人员,您实际上是唯一知道如何为您的应用程序明智地进行操作的人。



 类似资料:
  • 问题内容: Javascript是通过引用传递还是通过值传递?这是 Javascript中的 一个示例 :The Good Parts 。我对矩形函数的参数非常困惑。它实际上是,并在函数内部重新定义。没有原始参考。如果我从功能参数中删除它,则内部区域功能将无法访问它。 是关闭吗?但是没有函数返回。 问题答案: 基元按值传递,对象按“引用副本”传递。 具体来说,当您传递对象(或数组)时,您(无形中)

  • 我使用Weblogic 10.3.3来定义到外部Tibco JMS队列的连接。 我有一个设置: 一个 JMS 模块 添加了外部服务器详细信息,包括 tibco 初始上下文工厂 jndi connection url jndi 属性凭据 set java.nameing.security.principal 在我的代码中,我正在从JNDI执行一个简单的查找。 由于我在weblogic上的配置中有凭据

  • 问题内容: 前往游览的频道示例如下:https : //tour.golang.org/concurrency/2 通道c在求和函数中被修改,并且该函数终止后更改仍然存在。显然,c是通过引用传递的,但是没有创建指向c的指针。是否在go中通过引用隐式传递了通道? 问题答案: 从技术上讲,它们是被复制的,因为当您使用时 ,您是在堆上分配内容,因此从技术上讲,它是幕后的指针。但是指针类型没有公开,因此可

  • 问题内容: 我似乎无法获得任何一致的信息。不同的消息来源似乎说了不同的话,而古老的php.net本身( 似乎 )并未明确指出这一点- 尽管我必须承认,我只是快速浏览了一下。 如果我要传递“重”对象,则需要通过引用传递,但我不想继续输入: 如果我能摆脱 那么标准怎么说呢? 问题答案: 对象通过引用传递(和分配)。无需使用操作员地址。 当然,我键入的内容过于简单,但将适合您的目的。该文档指出: 经常提

  • 问题内容: 有没有办法检查PHP是否启用了JavaScript?如果是这样,怎么办? 问题答案: 不可以,这是不可能的,因为PHP是一种服务器端语言,它不会以任何方式或形式(客户端从PHP服务器请求)访问客户端的浏览器。 客户端可以通过HTTP标头提供一些元信息,但是它们不一定告诉您用户是否启用了JavaScript,并且您无论如何也不能依赖它们,

  • 问题内容: 我真的是Swift的新手,我刚刚读到类是通过引用传递的,并且复制了数组/字符串等。 通过引用进行传递是否与在Objective-C或Java中通过“ a”引用进行传递的方式相同,还是通过引用进行正确传递? 问题答案: Swift中的事物类型 规则是: 类实例是 引用类型 (即, 您 对类实例的引用实际上是一个 指针 ) 函数是参考类型 其他一切都是 价值类型 ; “其他所有内容”仅表示