Ошибка в работе прокси-сервера - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Вот код программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
 
namespace Proxy
{
    class Program
    {
        //Функция будет принимать экземпляр сокета и возвращать полученный ответ в виде массива байт
        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();
            }
        }
 
        static void Main(string[] args)
        {
            //Инициализируем класс TcpListener для прослушивания порта 8888
            TcpListener myTCP = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080);
            //Старт прослушивания
            myTCP.Start();
 
            //Бесконеный цикл для постоянной работы программы
            while (true)
            {
                //Проверка на наличие запросов к прокси - серверу
                if (myTCP.Pending())
                {
                    //Если запрос есть, то создаем сокет для обработки данных
                    using (Socket myClient = myTCP.AcceptSocket())
                    {
                        //Открываем сокет для чтения запроса
                        if (myClient.Connected)
                        {
                            //Получение запроса клиента
                            byte[] httpRequest = ReadToEnd(myClient);
 
                            //Перенаправление запроса на 80 порт
                            Regex myReg = new Regex(@"Host: (((?<host>.+?):(?<port>\d+?))|(?<host>.+?))\s+", RegexOptions.Multiline | RegexOptions.IgnoreCase);
                            Match m = myReg.Match(System.Text.Encoding.ASCII.GetString(httpRequest));
                            string host = m.Groups["host"].Value;
                            int port = 0;
                            if (!int.TryParse(m.Groups["port"].Value, out port)) { port = 80; }
 
                            //Получение IP-адрес по хосту
                            IPHostEntry myIPHostEntry = Dns.GetHostEntry(host);
 
                            //Создаем сетевую точку доступа
                            IPEndPoint myIPEndPoint = new IPEndPoint(myIPHostEntry.AddressList[0], port);
 
                            //Открываем еще один сокет, который направит полученный от клиента запрос на удаленный сервер
                            using (Socket myRerouting = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
                            {
                                myRerouting.Connect(myIPEndPoint);
                                if (myRerouting.Send(httpRequest, httpRequest.Length, SocketFlags.None) != httpRequest.Length)
                                {
                                    Console.WriteLine("При отправке данных удаленному серверу произошла ошибка...");
                                }
                                else
                                {
                                    //Получаем ответ
                                    byte[] httpResponse = ReadToEnd(myRerouting);
 
                                    //И напрявляем клиенту
                                    myClient.Send(httpResponse, httpResponse.Length, SocketFlags.None);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Вот ошибка:

Решение задачи: «Ошибка в работе прокси-сервера»

textual
Листинг программы
 IPEndPoint myIPEndPoint = new IPEndPoint(myIPHostEntry.AddressList[4], port);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы