Не удается прочитать данные из HttpListener. NET - PullRequest
0 голосов
/ 29 мая 2020

Я застрял с чтением данных из HttpListener. Данные поступают, я проверяю их с помощью request.ContentLength64, который обычно превышает 8000, и он увеличивается по мере того, как сервер генерирует все больше и больше данных. Сервер отправляет данные в виде HTTP-сообщения, а тип содержимого - text / plain. Когда я пытаюсь проверить, получил ли Streamreader какие-то данные через свой атрибут length, я получаю 0. Код немного запутан, так как я пробовал разные способы заставить его работать, но, к сожалению, мне не повезло. У кого-нибудь есть идеи, что я делаю не так? Спасибо!

                HttpListener listener2 = new HttpListener();
                listener2.Prefixes.Clear();
                listener2.Prefixes.Add("http://+:4200/");
                listener2.Prefixes.Add("http://XXX.XXX.eu/");

                listener2.Start();
                LogWriteLine("http listener started listening to: " +listener2.Prefixes);

                try
                {
                    while (true)//change to match end check
                    {
                        LogWriteLine("http listener waiting");
                        HttpListenerContext context = listener2.GetContext();
                        LogWriteLine("http request arrived");
                        HttpListenerRequest request = context.Request;
                        // Obtain a response object.
                        HttpListenerResponse response = context.Response;

                        System.IO.Stream body = request.InputStream;
                        System.Text.Encoding encoding = request.ContentEncoding;
                        System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);


                        if (!request.HasEntityBody)
                        {
                            LogWriteLine("No client data was sent with the request.");
                            Thread.Sleep(300);
                            //return;
                        }

                        if (request.ContentType != null)
                        {
                            LogWriteLine("Client data content type " + request.ContentType);
                        }
                        LogWriteLine("Client data content length " + request.ContentLength64); //Works fine

                        LogWriteLine("Start of client data:");
                        // Convert the data to a string and display it on the console.

                        Console.WriteLine(body.CanSeek);


                        string s = reader.ReadToEnd();
                        var ahoj = new StreamReader(context.Request.InputStream).ReadToEnd();
                        Console.WriteLine("ahoj length " + ahoj.Length); //0
                        Console.WriteLine(s); //nothing

                        string text;
                        var bytes = default(byte[]);
                        using (var reader1 = new StreamReader(request.InputStream,
                                 request.ContentEncoding))
                        {
                            text = reader1.ReadToEnd();
                            Console.WriteLine(text + text.Length); //output: 0
                            using (var memstream = new MemoryStream())
                            {
                                reader1.BaseStream.CopyTo(memstream);
                                bytes = memstream.ToArray();
                            }
                            Console.WriteLine("bytes:" + bytes.Length); //output: bytes: 0

                        }



                        LogWriteLine("End of client data:");
                        //write to console file
                        sw.Write(s);
                        body.Close();
                        reader.Close();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);

                }
...