【问题标题】:Send a FIN packet to notify that the data was sent发送一个FIN包通知数据已发送
【发布时间】:2016-04-19 08:46:26
【问题描述】:

我有一个 Windows 服务,它不断将数据发送到 NodeJS 流媒体,然后将该数据传输到客户端。

在 NodeJS 流媒体上,我正在监听套接字事件“数据”:

socket.on('data', function ...

在该函数中,我将所有接收到的数据包捆绑到一个字符串中。 收到所有相关数据包后,我想对该字符串进行操作,然后将其传输给客户端。

为此,我尝试监听“结束”事件:

socket.on('end', function ...

但是永远不会调用“结束”事件。 我读到我必须向 NodeJS 流媒体发起一个 FIN 数据包才能调用“结束”事件,为此我必须关闭 C# 服务上的流编写器。 但是,我正在为许多不同的客户处理大量数据,我担心每次完成单个字符串时都关闭编写器会产生很大的开销。这是一个合理的担忧吗?如果是这样,有没有其他方法可以发送 FIN 数据包?

谢谢, 阿里克

【问题讨论】:

    标签: c# node.js sockets tcp


    【解决方案1】:

    FIN 表示 TCP 连接的(优雅的)结束。如果您想在每个连接中发送多个“消息”,听起来您只需要以某种方式构建您的数据包。有很多方法可以做到这一点,但这完全取决于您的需求。举几个例子:

    • 为每个“消息”加上固定长度字节数的前缀,表示整个“消息”后面有多少字节。固定长度字节数取决于您计划为给定“消息”传输的最大数据量。

    • 使用某种分隔符。这取决于您要传输的数据类型。如果是二进制数据,这将不是一个好的选择。如果是二进制数据,您也许可以使用空字节或换行符(取决于您的文本内容)。

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 1970-01-01
      • 2021-03-20
      • 2019-07-23
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多