NetCoreServer icon indicating copy to clipboard operation
NetCoreServer copied to clipboard

Best way for http GET Stream

Open SoftStoneDevelop opened this issue 3 years ago • 0 comments

How me get http stream for get request(using this nuget)? You need something like this (the code is rough, I know):

if (commands[0].ToUpper() == "HEAD")
                {
                    var response = client.SendHeadRequest(commands[1]).Result;
                    Console.WriteLine(response);
                }
                else if (commands[0].ToUpper() == "GET_STREAM")
                {
                    var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                    var connectEventArg = new SocketAsyncEventArgs();
                    connectEventArg.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(address), port);
                    connectEventArg.Completed += async (e, args) =>
                    {
                        try
                        {
                            var bufferRead = new Memory<byte>(new byte[8000]);
                            var bufferReadBackground = new Memory<byte>(new byte[8000]);
                            var bufferSwitch = false;
                            using (var stream = new NetworkStream(socket))
                            {
                                var request = new HttpRequest().MakeGetRequest(commands[1]);
                                stream.Write(request.Cache.Data);

                                var taskRead = stream.ReadAsync(bufferRead);
                                while (stream.CanRead)
                                {
                                    var size = await taskRead;
                                    Memory<byte> data;
                                    if (!bufferSwitch)
                                    {
                                        data = bufferRead;
                                        taskRead = stream.ReadAsync(bufferReadBackground);
                                        bufferSwitch = true;
                                    }
                                    else
                                    {
                                        data = bufferReadBackground;
                                        taskRead = stream.ReadAsync(bufferRead);
                                        bufferSwitch = false;
                                    }

                                    Console.WriteLine($"Read from stream '{data.Length}'");
                                    //do somthing, example parse data from stream
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(e);
                        }
                    };
                    
                    socket.ConnectAsync(connectEventArg);
                }

For example maybe use stream "31.133.13.58:8888/mjpg/video.mjpg".

SoftStoneDevelop avatar Jun 06 '21 16:06 SoftStoneDevelop