【问题标题】:Get Content of a http request获取http请求的内容
【发布时间】:2014-07-16 12:06:09
【问题描述】:

我正在尝试获取 http 请求的内容...我的程序正在使用线程和套接字与访问终端通信... 我没有

这是从终端发送的请求:

POST /iclock/devicecmd?SN=2182682370001 HTTP/1.1 内容为 ID1&Return=0&CMD=INFO..

这是我获取http请求全部内容的功能:

private string GetPedido(NetworkStream stream)
{
string sPedido = "" ;
Byte[] bytesFromStream = new Byte[GlobalFunctionAndVariables.iStreamBufferSize];
while (_tcpClient.Available>0)
{
  stream.Read(bytesFromStream, 0, bytesFromStream.Length);
  //Console.Write("available: {0}\n", _tcpClient.Available);
  sPedido += System.Text.Encoding.ASCII.GetString(bytesFromStream, 0, bytesFromStream.Length);
}
Console.WriteLine("Terminou, a enviar resultado \n");

}

现在的缓冲区是 32 字节。 目前我只得到 http 标头而不是内容。

如果我想返回内容,是否需要逐字节解析字符串..然后找到 content-length 的值并要求 fecth x 更多字节。

这是我唯一的选择吗?

提前致谢

【问题讨论】:

  • 只是好奇为什么,如果你正在处理 HTTP 请求,你没有使用HttpListener
  • 您是否尝试过使用StreamReader?看看这里:stackoverflow.com/questions/7535901/…
  • 更改为流阅读器,在streamreader.readtoend()之后,我把线程spleep.still not working,因为从streamreader.readtoend()传递到thread.sleep时,客户端关闭插座。

标签: c# multithreading sockets .net-2.0


【解决方案1】:

Available 属性并非您认为的那样。删除它的使用。

另外,您没有使用Read 的返回值。 TCP 为您提供字节流。读取操作可以返回从一个字节开始的任何数量。您的代码必须处理这种情况。

您可能应该继续阅读,直到远程端完成发送。您可以通过检查读取的字节数是否为零来了解这一点。

【讨论】:

  • 你的想法是有 thi: while(size= stream.Read(bytesFromStream, 0, bytesFromStream.Length)>0);
  • 差不多,是的。这是规范的做法。
  • 但是我仍然需要检查我是否已经收到消息,如果 condicao 是真的,他们终端关闭套接字......
  • condicao 是什么意思?您需要解析响应以提取内容。为什么不直接使用 HTTP 库?
  • im portuguese..当用英语写作时,有时我会用葡萄牙语写单词,我的错...我的意思是条件..
猜你喜欢
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2021-03-25
  • 2017-08-05
  • 2011-07-11
相关资源
最近更新 更多