[QT] Simple http server na apache

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

[Solved] [QT] Simple http server na apache

Post autor: mathieus »

Piszę aplikację przesyłającą dane (stronkę) na podstawie ścieżki wyszukiwania URL (query string) np. http://www.darmorza.co/projekt/program? ... maczne=tak.
Po dłuższych poszukiwaniach znalazłem ("A simple HTTP Server"):
http://doc.qt.nokia.com/solutions/4/qts ... erver.html

Ściągnąłem kod ze strony, dałem klasy w plik nagłówkowy, dodałem potrzebne biblioteki, ściągnąłem i zainstalowałem qtservice-2.6-opensource... skompilowałem ...
... niby aplikacja chodzi, ale nie daje wyników!?

Umieściłem na apache, dałem w localhost port 80 (zmieniałem port na 80. Port 8080 na apachu mi szwankuje) ale strona nie reaguje na program - nie odpowiada... Dziwi mnie też fakt że nigdzie w przykładowym źródle nie jest wymagana nazwa serwera.

Może ktoś wie co robię nie tak i może mi pomoc?
xfermi
Piegowaty Guziec
Piegowaty Guziec
Posty: 23
Rejestracja: 22 lis 2010, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [QT] Simple http server na apache

Post autor: xfermi »

albo apache albo to co podałeś w doc QT...

apache jak i ten program w doc to serwery www a nie same apliakcje uruchamiane na nich...

musisz wybrac czy chcesz uzywac apacha via cgi czy napisać wlasny serwer www (w sumie masz prawie gotowego) w qt :)
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: mathieus »

Dzięki... do spraw sieciowych nie mam intuicji, a jestem "na ostrzu noża"...
Jeżeli mam prawie gotowy serwer w qt, to nie wiem co mi jeszcze brakuje :(
Nie wiem też jak go odpalić by był widoczny przez np. firefoxa... nie mogę znaleźć miejsca w kodzie gdzie można podać adres... tych klas i metod sieciowych w QT jest od groma... dasz xfermi dalsze wskazówki?
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: DDAroo »

Chcesz napisać (1)serwer www czy (2)program działający na serwerze www?

1. Napisać program, który nasłuchuje na porcie 80 komputera, czyta żądania HTTP i udziela odpowiedzi też jako strony HTTP. Taki program musi być później umieszczony i uruchomiony na jakimś fizycznym serwerze albo Twoim komputerze.

2. Napisać program php, który wyświetla stronę w zależności or URL jaki wpiszesz w przeglądarke. Taki program umieszcza się na serwerze www np. apache.
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: mathieus »

To jest część większego programu i ma za zadanie przesyłać stronkę na podstawie ścieżki wyszukiwania URL (query string) np. http://www.darmorza.co/projekt/program? ... maczne=tak.
Najprawdopodobniej (1) (zaczynam rozumieć)
Czy mam dodać metody QTcpServer (np. listening) do Simple HTTP Server? Czy potrzebuję innych metod? Czy też zrezygnować wogóle z Simple HTTP Server?
xfermi
Piegowaty Guziec
Piegowaty Guziec
Posty: 23
Rejestracja: 22 lis 2010, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [QT] Simple http server na apache

Post autor: xfermi »

nie - poprostu jak dodasz klase QTcpServer, pozniej wraz ze startem głównego programu odpala się ona jako wątek i oczekuje na połączenia http...

tylko jeżeli chcesz tak jak Ty masz w url gdzie program to twoj program - nie zrobisz tego w QT innaczej

http://www.darmorza.co/projekt/program? ... maczne=tak

program to musi byc aplikacja php,perl,python etc lub C++ odpalany z poziomu cgi.
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: DDAroo »

Ok, czyli masz napisać prosty serwer www. Na początek musisz wiedzieć co będzie otrzymywał Twój program oraz co ma zwracać. Strony www są przesyłane przy użyciu protokołu HTTP. Przykładowo, moja przeglądarka gdy chce wyświetlić stronę http://en.wikipedia.org/wiki/Hypertext_ ... r_Protocol wysyła do serwera en.wikipedia.org żądanie HTTP o takiej treści:

Kod: Zaznacz cały

GET /wiki/Hypertext_Transfer_Protocol HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.00
Host: en.wikipedia.org
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: pl-PL,pl;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://www.google.com/search?client=opera&rls=pl&q=http+example&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest
Pragma: no-cache
Cache-Control: no-cache
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Serwer www wikipedii wysyła taką odpowiedź:

Kod: Zaznacz cały

HTTP/1.0 200 OK
Date: Fri, 14 Jan 2011 19:56:49 GMT
Server: Apache
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Content-Language: en
Vary: Accept-Encoding,Cookie
Last-Modified: Wed, 12 Jan 2011 16:53:53 GMT
Content-Encoding: gzip
Content-Length: 27670
Content-Type: text/html; charset=UTF-8
X-Cache: MISS from sq64.wikimedia.org
X-Cache-Lookup: HIT from sq64.wikimedia.org:3128
X-Cache: MISS from amssq40.esams.wikimedia.org
X-Cache-Lookup: HIT from amssq40.esams.wikimedia.org:3128
X-Cache: MISS from amssq46.esams.wikimedia.org
X-Cache-Lookup: MISS from amssq46.esams.wikimedia.org:80
Connection: keep-alive

[treść strony www]
Twój serwer wystarczy, że będzie wysyłał na przykład taką odpowiedź:

Kod: Zaznacz cały

HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8

[treść strony www]
Zwróć uwagę, że nagłówek HTTP i treść strony jest oddzielana przez dwa "entery", czyli przez dwie serie znaków \r\n - powrót karetki + znak nowej linii. Ponieważ Twój serwer ma być bardzo prosty, więc możesz założyć, że żądanie strony wygląda podobnie do żądania opery do wikipedii. Realne serwery muszą być w stanie obsługiwać znacznie bardziej zwariowane żądania.

Zanim zaczniesz przerabiać ten simple HTTP serwer upewnij się, że potrafisz skompilować jego kod i uruchomić program. Kompilowanie programu korzystającego z Qt wymaga ciut więcej zachodu niż kompilowanie standardowego programu C++. Umiesz to zrobić?
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: mathieus »

dodam jako ciekawostkę że obecnie kompiluję pod Windows 7 i mam problemy z bibliotekami ansi C (nie podoba mu się malloc i sprintf) a program był już kompilowany pod linuxem

Kod simple HTTP skompilowałem, tylko że on nic nie robi tylko wypisuje to co jest w qWarning. Prześledziłem klasy i nie ma wywołania metody start w konstruktorze HttpService. Nie widzę dojścia do HttpDaemon. Tak jakby brakowało jakichś wywołań klas i metod.

Nad CGI jeszcze pomyślę. Jest niby klasa QUrl, ale to na potem.
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: DDAroo »

Z dokumentacji QtService wynika, że metoda start jest wywołana automatyczne w chwili uruchamiania usługi, co zwykle ma miejsce w chwili uruchamiania systemu. Może łatwiej Ci będzie ogarnąć przykład serwera, który działa jako zwykły program, a nie usługa?
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: mathieus »

Wreszcie coś nowego... przy kompilacji:

Kod: Zaznacz cały

Komunikaty aplikacji: 
Uruchamianie E:\Moje (...)\debug\lserver.exe zakończone kodem -4
-4 czyli chyba niedobrze... przy debuggowaniu:

Kod: Zaznacz cały

Komunikaty aplikacji:
 The service Qt HTTP Daemon could not start
żadna pułapka debuggera nie chwyta poza konstruktorem class HttpService : public QtService<QCoreApplication>
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: mathieus »

Dziękuję za wspieranie i naprowadzanie na rozwiązanie - które znalazło się następnego dnia.

Przeanalizowałem dokładniej kod Simple Http Server i rozwiązanie okazało się banalne - wystarczyło uruchomić program z opcją -e (jak execute) lub podstawić tę wartość pod argument.
Program, wysyłający na żądanie obrazy map kartograficznych, napisałem. Dostałem dzięki temu pracę i... nie miałem czasu zamknąć temat.

Polecam postawienie sobie serwera - daje to dużo satysfakcji.
Jeszcze raz dziękuję - zamykam temat.
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [QT] Simple http server na apache

Post autor: mikolajs »

Do tego typu zastosowań warto zastanowić się nad biblioteką Wt
mathieus
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 26 lut 2007, 22:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [QT] Simple http server na apache

Post autor: mathieus »

Z pewnością do zaawansowanych usług serwerowych (np. blog, gierka html - dobrze rozumuję?) to Wt pewnie warto stosować. Zabawne że będę działał (o zgrozo) w VB i w VC#, a wtedy zupełnie nie wiem co jest dedykowane. Znam takie osoby co nawet na asemblerze postawiliby serwer. Jak na razie to mogę jedynie poznawać podstawy działania internetu, a taki serwis to zawsze 'coś' na początek.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości