Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Bulgarian
  4. [Решен]HTTP сървър и двоични файлове
Forum Update on Monday, May 27th 2025

[Решен]HTTP сървър и двоични файлове

Scheduled Pinned Locked Moved Bulgarian
7 Posts 2 Posters 4.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    ivanov-yordan
    wrote on last edited by
    #1

    Правя HTTP сървър за едно Linux Box устройство. Като цяло всичко е готово, но срещам проблеми с прегледа на двоични файлове. HTML, CSS, javaScrip и други видове текстови файлове излизат в браузъра без проблеми, но когато изображения, или се клиента се опитва да ги свали, или цикли непрекъснато. Имам механизъм за различаване на mime типа на файловете и се чудя дали когато е image/xxx да не ползвам QImage, вместо QFile, но тогава се появява проблема "А какво да правя с Flash и видеа?".

    Докато съм на въпроса? Може ли някой да ми предложи и вариант при който да пазя нещо като сесия на всеки клиент?

    1 Reply Last reply
    0
    • T Offline
      T Offline
      task_struct
      wrote on last edited by
      #2

      Здравей,

      Само да видя дали съм те разбрал правилно. Имаш сървър и той предоставя файлове на клиент? Този клиент с какво се свързва към теб? Твоя си програма или браузър?

      Ако е браузър трябва да му пращаш mime типовете, които той очаква и след това картинката/флаша като поредица от байтове.

      "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

      • Linu...
      1 Reply Last reply
      0
      • I Offline
        I Offline
        ivanov-yordan
        wrote on last edited by
        #3

        Написах WEB сървър (като Apache). Клиента го достъпва през браузър. Идеята е, че устройството ще се достъпва през LAN по някаква конвенция(например фиксиран IP адрес), което също трябва да измисля (Не знам нищо за мрежата и клиентите не трябва да пипат router-и). Та като цяло всичко в този сървър си работи. На клиента пращам нещо от рода:

        @HTTP/1.0 200 Ok
        Content-Type: image/png

        Съдържание на файла
        @

        Всичко това го превръщам в QByteArray и го пращам. Съдържанието го взимам с "QFile::ReadAll()":http://doc.qt.nokia.com/latest/qiodevice.html#readAll, като предполагам, че тук е една от грешките ми.

        @Response response;
        response.setHeader("Content-Type", mimeType);

        QFile file(fileLocation);
        file.open(QIODevice::ReadOnly);
        this->write(response.write(file.readAll()));
        file.close();@

        Response класа като цяло ми държи заглавната част. А последното което направих с this->write e:

        @QTextStream stream(this->socket);
        stream.setAutoDetectUnicode(true);
        stream << message;
        this->socket->close();@

        Понеже го видях на "това място":http://doc.qt.nokia.com/solutions/4/qtservice/qtservice-example-server.html, като смятам, че тук също греша, понеже файловете вече след сваляне на файла получавам съобщение, че е "счупен".

        Надявам се този път да съм обяснил добре проблема си. :)

        1 Reply Last reply
        0
        • T Offline
          T Offline
          task_struct
          wrote on last edited by
          #4

          Доколкото разбирам, ти създаваш един QTextStream, който сочи към сокета и в него пишеш прочетените от файла данни? Мисля, че това обърква нещата. Пробвай прочетените данни от QFile да си пишеш директно в сокета. И двата класа наследяват QIODevice, така че няма да има проблеми.

          "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

          • Linu...
          1 Reply Last reply
          0
          • I Offline
            I Offline
            ivanov-yordan
            wrote on last edited by
            #5

            Беше напълно прав.
            По някаква неясна за мен причина преобразувах резултата от file.readAll() в QTextStream. След като го оправих всичко проработи както трябва.
            Сега трябва да разбера само как да спра зареждането на страницата след като съм изпратил всичко, без да затварям сокета, така че да обработвам log-нати потребители, но ще се справя с това.
            Много благодаря.

            1 Reply Last reply
            0
            • T Offline
              T Offline
              task_struct
              wrote on last edited by
              #6

              Ако използваш QNetworkAccessManager виж "тази":http://doc.trolltech.com/4.8-snapshot/qnetworkaccessmanager.html#cookieJar функция и класа, който връща. Явно има възможност да използваш кукита с класа "QNetworkCookie":http://doc.trolltech.com/4.8-snapshot/qnetworkcookie.html

              "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

              • Linu...
              1 Reply Last reply
              0
              • I Offline
                I Offline
                ivanov-yordan
                wrote on last edited by
                #7

                Идеално. А аз мислех сам да си имплементирам някаква странна работа с бисквитки. За пореден път ми беше полезен. :)

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved