Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取http请求的内容_C#_Multithreading_Sockets_.net 2.0 - Fatal编程技术网

C# 获取http请求的内容

C# 获取http请求的内容,c#,multithreading,sockets,.net-2.0,C#,Multithreading,Sockets,.net 2.0,我正在尝试获取http请求的内容…我的程序正在使用线程和套接字与访问终端通信。。 我知道 这是从终端发送的请求: POST/iclock/devicecmd?SN=218268237001 HTTP/1.1,内容为 ID1&Return=0&CMD=INFO 这是我获取http请求完整内容的函数: private string GetPedido(NetworkStream stream) { string sPedido = "" ; Byte[] bytesFromStream = new

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

这是从终端发送的请求:

POST/iclock/devicecmd?SN=218268237001 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头,而不获取内容

如果我想返回内容,我是否需要逐字节解析字符串..然后找到内容长度的值并要求再发送x个字节

这是我唯一的选择吗


提前感谢

可用的
属性与您认为的不一样。删除它的使用

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


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

您的想法是:while(size=stream.read(bytesFromStream,0,bytesFromStream.Length)>0);差不多,是的。这是做这件事的标准方法。但我仍然需要检查我是否已经收到消息,如果condicao是真的,他们终端会关闭插座…condicao是什么意思?您需要解析响应以提取内容。为什么不直接使用HTTP库?我是葡萄牙语的。当我用英语写作时,有时我用葡萄牙语写单词,我的坏…我的意思是条件。只是好奇为什么,如果你在处理HTTP请求,你没有使用。你试过使用
StreamReader
?在这里看一看:在streamreader.readtoend()之后,更改为streamreader,我将线程spleep.仍然不工作,因为当从streamreader.readtoend()传递到thread.sleep时,客户端关闭了套接字。