【问题标题】:C# Packet sending using TCP streamsC# 使用 TCP 流发送数据包
【发布时间】:2015-04-16 06:00:11
【问题描述】:

我正在尝试将多个数据包从 tcp 服务器发送到客户端,仅使用来自基本“Stream”类的读写。问题是,我不知道数据包的大小(客户端)。我应该在每个数据包之前发送和 int(4 个字节),以便客户端可以调整缓冲区并仅接收指定的字节数吗?我觉得 tcp 协议中已经有一些东西可以处理它,但我似乎找不到它。

【问题讨论】:

  • I feel like there's already something in the tcp protocol that handles that。不,没有。
  • 您不是在发送数据包,而是在写入流。一次调用写入或读取!= tcp 发送的一个数据包
  • @ScottChamberlain 我明白这一点,但我的问题更像是“是否有必要实现数据包大小前缀才能发送数据包?”
  • 是的,如果您没有固定大小的消息格式,发送一个 4 字节的 int 可能是最好的方法。这样在您的接收端读取四个字节,将其解码为 int n,然后读取 n 更多字节。

标签: c# sockets tcp


【解决方案1】:

您想要执行的过程称为Message FramingTcpClient 中没有内置的机制可以为您执行此操作。这是更高级别应用程序层的责任,无论是您自己的代码在消息的前缀上附加长度,还是像 WCF 那样为您处理消息帧的其他库。

Here is a full example 显示您在问题中建议的长度前缀实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多