【问题标题】:C# ReceiveAsync response corruptC# ReceiveAsync 响应损坏
【发布时间】:2013-03-19 06:22:26
【问题描述】:

在响应中添加随机数据。这发生在所有站点和页面上,并且对于每个特定页面,这些数据都是固定的。 示例:

Connection: close
X-Powered-By: PHP/5.4.11

1fb4
<!DOCTYPE html..........

<script>
    $('#toggle_debug').cl
134
ick(function () {

Сode:

if (e.BytesTransferred > 0)
{
    Response.AddRange(e.Buffer);
    if (Response.Count >= MaxContentLength)
    {
        Final();
    }
    else
    {
        e.SetBuffer(0, BufferSize);
        e.AcceptSocket.ReceiveAsync(e);
    }
}

响应 - 包含字节的列表。此外, StringBuilder 和其他有同样的问题。附加符号是固定的,不会改变。有什么问题?

【问题讨论】:

  • ReceiveRead 返回一个整数,告诉您读取了多少字节。缓冲区中只有那么多字节是有效的。如果要阅读所有内容,则需要使用循环。
  • 不需要添加整个缓冲区和一部分吗?
  • 我猜你需要使用缓冲区的第一个 e.BytesTransferred 字节。阅读文档了解详细信息。类似Response.AddRange(e.Buffer.Take(e.BytesTransferred))
  • @CodesInChaos 问题是关于ReceiveAsync 而不是ReceiveRead,不是吗?
  • @PeterRitchie 我还没有与ReceiveAsync 合作过,但我希望它能够与Read&co 分享该特性。一些细节,例如返回值与e.BytesTransferred 的变化,但我希望获得的字节数少于请求的字节数的基本问题保持不变。

标签: c# sockets asynchronous response


【解决方案1】:

我想你想要

Response.AddRange(new ArraySegment<byte>(e.Buffer, 0, e.BytesTransferred));

【讨论】:

  • 也许,你的意思是 Response.AddRange(new ArraySegment(e.Buffer, 0, e.BytesTransferred).Array);不工作:с
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多