【问题标题】:Handling of TCP packet order on receiver side on application level在应用程序级别的接收方处理 TCP 数据包顺序
【发布时间】:2017-06-03 19:33:15
【问题描述】:

通过TCP套接字编程: 在我的应用程序中,接收方使用一个小缓冲区然后传输数据。所以 recv() 被调用了几次,直到收到所有数据。在每次调用 recv() 时,使用的缓冲区都会被复制到另一个大缓冲区或部分附加到文件中。

我的问题是,我应该在我的代码中额外处理接收到的 TCP“数据包顺序”,还是 TCP 在后台在自己的缓冲区中处理它?因为传输的 TCP 数据包到达接收端的顺序不正确。

【问题讨论】:

  • TCP 确保数据按照发送顺序到达。如果您观察到其他情况,则说明您的代码中某处存在错误。
  • 对于 TCP 新手来说,一个常见的误解是他们期望 messaging(即,在一端对 Send 的每次调用都会与另一端对 Receive 的调用相匹配)。如果这就是你认为你得到的,也许你只是误解了你所看到的“数据包乱序到达”,正如其他人所提到的,这不会发生。

标签: c# sockets tcp tcpserver


【解决方案1】:

我的问题是,我是否应该在我的代码中另外处理接收到的 TCP“数据包顺序”

没有。 TCP 保证它将按照接收到的顺序将数据移交给应用程序。应用程序不需要执行逻辑来保证数据接收的顺序。再次检查您的应用程序代码是否存在导致接收数据与发送顺序不同的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2021-11-29
    • 2023-03-17
    • 2011-06-25
    • 2016-12-16
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多