C# Преобразование данных чтения сокета из массива байтов в некоторый объект - PullRequest
0 голосов
/ 30 мая 2020

Я пишу небольшое приложение WinForms, которое будет получать файлы с веб-сайта. То есть на веб-сайте кто-то выберет файл и нажмет «Отправить файл», запрос ajax будет отправлен на localhost, я получу этот файл в приложении и сгенерирую статистику в моем приложении WinForms. Я использовал сокеты и после получения POST-запроса с файлом получаю массив байтов. В нем находится заголовок запроса с телом запроса и файлами. Я не знаю, как преобразовать этот массив байтов в какой-либо объект, содержащий заголовок запроса, тело и данные файла. Ниже приведен код получения запроса.

    public void StartListening()
    {
        // Data buffer for incoming data.  
        byte[] bytes = new byte[1024];

        // Establish the local endpoint for the socket.  
        // Dns.GetHostName returns the name of the
        // host running the application.  
        var ipHostInfo = Dns.GetHostEntry("127.0.0.1");
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

        // Create a TCP/IP socket.  
        Socket listener = new Socket(ipAddress.AddressFamily,
            SocketType.Stream, ProtocolType.Tcp);

        // Bind the socket to the local endpoint and
        // listen for incoming connections.  
        try
        {
            listener.Bind(localEndPoint);
            listener.Listen(10);

            // Start listening for connections.  
            while (true)
            {
                // Program is suspended while waiting for an incoming connection.  
                Socket handler = listener.Accept();
                string Data = null;

                // An incoming connection needs to be processed.  
                while (true)
                {
                    if (handler.Available == 0)
                    {
                        break;
                    }
                    int bytesRec = handler.Receive(bytes);
                    Data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                }

                // Get request in bytes array.  
                byte[] request = Encoding.ASCII.GetBytes(Data || string.Empty);

                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }
...