Почему получаю пустое сообщение от google.com xamarin c#

Хочу отправить запрос и получить ответ с помощью сокета на xamarin(android) для реализации прокси сервера, но при получении ответа от удалённого сервера очень часто ловлю пустые сообщения. На компьютере в консольке всё прекрасно работало, а на андроид не очень.

Код:

        private static void ExecuteRequest(object arg)
    {
        //tcp listener с IPAddress.Parse("192.168.49.1"), 8889 если это имеет значение
        Socket myClient = (Socket)arg;
        // соединяемся
        if (myClient.Connected)
        {
            try
            {
                // получаем тело запроса
                byte[] httpRequest = ReadToEnd(myClient);
                // ищем хост и порт
                Regex myReg = new Regex(@"Host: (((?<host>.+?):(?<port>\d+?))|(?<host>.+?))\s+", RegexOptions.Multiline | RegexOptions.IgnoreCase);
                string req = System.Text.Encoding.ASCII.GetString(httpRequest);
                Match m = myReg.Match(System.Text.Encoding.ASCII.GetString(httpRequest));
                string host = m.Groups["host"].Value;
                int port = 0;
                // если порта нет, то используем 80 по умолчанию
                if (!int.TryParse(m.Groups["port"].Value, out port)) { port = 80; }

                // получаем апишник по хосту
                IPHostEntry myIPHostEntry = Dns.GetHostEntry(host);

                // создаем точку доступа
                IPEndPoint myIPEndPoint = new IPEndPoint(myIPHostEntry.AddressList[0], port);

                // создаем сокет и передаем ему запрос
                using (Socket myRerouting = new Socket(myIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp | ProtocolType.IP))
                {
                    myRerouting.Connect(myIPEndPoint);

                    myRerouting.Send(httpRequest);
                    byte[] httpResponse = new byte[myRerouting.ReceiveBufferSize];
                    //--------------------------------------------------------------------------------------------------------------------------------
                    //В массиве httpResponse очень часто просто нули. Не думаю, что это есть хорошо. То, что в сумме не работает, подкрепляет эту идею
                    try//Защита от сброшеного соединения
                    {
                        myRerouting.Receive(httpResponse, httpResponse.Length, SocketFlags.None);
                    }
                    catch(Exception ex)
                    {

                    }
                    //Если использовать byte[] httpResponse = ReadToEnd(myRerouting);
                    //:
                    // получаем ответ 0 байт всегда, НО на компе норм ловит
                    //--------------------------------------------------------------------------------------------------------------------------------


                    string d = System.Text.Encoding.ASCII.GetString(httpResponse);
                    //Если есть что-то то обрезаем конец нулей(как правило, конец заполнен нулями), а иначе передаем ноль и уходим
                    #region Вот
                    if (httpResponse.FirstOrDefault(x => x != 0) == default)
                    {
                        myClient.Send(new byte[] { 0});
                        return;
                    }
                    int countZero = 0;
                    int i = 0;
                    for (i = 0; i < httpResponse.Length; i++)
                    {
                        if (httpResponse[i] == 0)
                        {
                            countZero++;
                            if (countZero >= 5)
                            {
                                i -= 4;
                                break;
                            }
                            continue;
                        }
                        countZero = 0;

                    }
                    httpResponse = httpResponse.Take(i).ToArray();
                    #endregion


                    // не суть
                    if (httpResponse != null)
                    {
                        string d2 = System.Text.Encoding.Unicode.GetString(httpResponse);
                        string deorgi = System.Text.Encoding.UTF8.GetString(httpResponse);
                        string aski = System.Text.Encoding.ASCII.GetString(httpResponse);
                        myClient.Send(httpResponse);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            myClient.Close();
        }
    }

    private static byte[] ReadToEnd(Socket mySocket)
    {
        byte[] b = new byte[mySocket.ReceiveBufferSize];
        int len = 0;
        using (MemoryStream m = new MemoryStream())
        {
            while (mySocket.Poll(1000000, SelectMode.SelectRead) && (len = mySocket.Receive(b, mySocket.ReceiveBufferSize, SocketFlags.None)) > 0)
            {
                m.Write(b, 0, len);
            }
            return m.ToArray();
        }
    }

Хост обычный гугл

введите сюда описание изображения введите сюда описание изображения

1 000 000 нулей

введите сюда описание изображения


Ответы (0 шт):