Forum: PC-Programmierung C / C++ Browser als GUI (localhost)


von Fer T. (fer_t)


Lesenswert?

Hallo zusammen,
Ich habe mal eine Frage, und zwar schreibe ich häufiger mal kleine 
Programme, die meisten sind nur kleine Terminal/Konsolen Programme und 
daher brauche ich eigentlich keine GUI. Aber wenn ich doch eine brauche 
nehme ich meistens QT (schreibe hauptsächlich für Linux-Systeme und da 
ich nur kleinere Sachen mache stelle ich die unter GPL bereit -> keine 
Lizenzprobleme).
Jedoch ist QT etwas aufwändig und auch wenn es QT auch für Windows gibt, 
so bedeutet das für Windows Nutzer immer mehr Arbeit.
Ich habe aber immer wieder mal Programme gesehen, die man über den 
Browser steuern kann, ein Beispiel, dass mir gerade ein fällt ist 
Gutenprint für Linux.
Daher meine Frage, wie wird so was gemacht?
Vielleicht hat auch jemand einen Link oder kann mir sagen wie das 
abläuft, also wie das System funktioniert (HTML Dateien sicher für den 
Browser, aber wie verarbeitet das Programm die Antworten, also läuft da 
ein lokaler PHP Server?)
Ich konnte nämlich leider bei Google nichts nützliches finden.
MfG und schon mal Danke,
Fer. T.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Fer T. schrieb:
> also läuft da
> ein lokaler PHP Server

Es läuft ein Webserver... ob dieser die Seiten mit PHP Aufbereitet ist 
nochmal eine andere Geschichte.

Im einfachstem Falle ein Socket welcher von einem kleinen HTTP Stack 
bedient wird und einfach nur HTML Seiten ausliefert und die 
Anfragen/Daten entgegen nimmt.

von Patrick (Gast)


Lesenswert?

Ein weiteres Stichwort wäre CGI bzw. FastCGI. Dahinter kann sich alles 
Mögliche verbergen, z. B. Perl-Skripte oder auch ausführbare Programme 
(z. B. mit C zusammengestrickt).
Es wird ein HTTP-Server benötigt, der die CGI-Skripte (-Programme) 
entsprechend aufruft.
Programmierbeispiel in C habe ich gerade keines zur Hand, hatte aber vor 
Jahren so Einiges im Internet gefunden.

von Εrnst B. (ernst)


Lesenswert?

Fer T. schrieb:
> schreibe hauptsächlich für Linux-Systeme und da
> ich nur kleinere Sachen mache stelle ich die unter GPL bereit -> keine
> Lizenzprobleme

QT ist seit Ewigkeiten unter der LGPL. d.H. du brauchst noch nichtmal 
das, sondern kannst auch kostenfrei ohne Lizenzprobleme Kommerz-Software 
(dynamisch) gegen die QT linken, vorrausgesetzt du änderst die QT selber 
nicht.
Aber bleib bei der GPL für deine Software, ist eh besser so ;)

von hmmm (Gast)


Lesenswert?

Das wikisystem moinmoin-Wiki (http://www.moinmo.in) hat auch einen Modus 
mit einem standalone-Webserver für lokale Verwendung, es benutzt dabei 
Python (ist in Python geschrieben, und in der Standardbibiliothek ist 
bereits ein einfacher Webserver). Auch externe CGI-Module einbinden (die 
dann ja in C oder so sein könnten) ist glaube nicht so schwer in Python.

von Fer T. (fer_t)


Lesenswert?

Danke,
also heißt das ich muss einen Webserver laufen haben (localhost) der 
dann als Brück zwischen Browser und meinem Programm (als CGI) dient?
Also z.B. den Boa mit rein packen (Boa Server, soll angeblich 
pattformunabhängig sein und ist nur 200 Kb groß, die anderen wie 
Cherokee sind mit 5Mb+ alle etwas groß).


Edit:
Bez. ich habe das hier gefunden: 
http://www.c-plusplus.de/forum/169861-full
Wenn ich das richtig verstehe (hab gerade kaum Zeit, hab nur drüber 
geguckt) dann steht da wie man Sockets mit dem HTTP Protokoll verbindet, 
also das was Läubi gesagt hat, via Sockets Antworten annehmen und selber 
Antworten in Form von HTML ausgeben...

Ok gucke mal weiter.
MFG

von Fer T. (fer_t)


Lesenswert?

So, wenn jemand auf dieses Thread stoßen sollte, hier ein Tipp, welcher 
einem echt helfen kann:
http://sourceforge.net/projects/tinyhttpd/

Das ist ein kleiner Webserver in einer Source Datei (geschrieben in C), 
werde mich damit jetzt auch mal auseinander setzen :D

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Was für Programme sind das denn? Kannst du sie vielleicht gleich in 
JavaScript schreiben? Das wäre am einfachsten.

von Fer T. (fer_t)


Lesenswert?

Ja das wäre einfacher, aber kann man denn mit JavaScript die Ports des 
PCs ansprechen? Also RS232.
Wenn das ginge könnte ich das machen.

von Εrnst B. (ernst)


Lesenswert?

Fer T. schrieb:
> Also RS232.

Grad da wäre ein Webserver recht unangenehm.. der verarbeitet einzelne 
HTTP-Requests, die mehr oder weniger voneinander unabhängig sind, und 
auch zu mehreren gleichzeitig auftreten können.
Das mit nur einer RS232-Verbindung zu koppeln, die immer nur von einem 
Prozess gleichzeitig verwendet werden sollte, ist immer etwas "tricky".
=> am einfachsten mit einem Application-Server, der evtl. gleich den 
HTTPD-Teil mit enthält.

Lässt sich z.B. auch mit der QT schreiben (brauchst ja den GUI-Teil 
davon nicht nehmen) such mal in der QT-Doku nach "simple HTTP Server", 
da gibts ein Beispiel.

von mrx (Gast)


Lesenswert?

Also was noch eine Möglichkeit wäre ist Java. Ein Webinterface macht 
Sinn bei Embedded-Anwendungen bzw. Serveranwendungen und MMIs für 
Netzwerkgeräte.

Für eine Standalone-Anwendung ein Web-GUI zu machen ist eine echte 
Krücke. Angesichts deiner Frage, gehe ich nicht davon aus dass Du viel 
Erfahrung mit HTML  PHP  Perl / CGI hast. Aufgrund dessen könntest Du 
Dir die Einarbeitungszeit sparen und die Anwendung lieber in Java 
schreiben. Die Umstellung von c / c++ ist nicht wirklich eine 
Herausforderung. RS232 sollte über Java Communications API gehen. Wenn 
Du hardwarenahe Sachen machen willst dann wird natürlich mit Java wieder 
eng.

Ich persönlich bin eher ein Fan davon für jedes Projekt die beste 
Umgebung (die mit den wenigsten Kompromissen) zu wählen als immer mit 
"meiner" Umgebung das gewünschte Ergebnis "hinzubiegen".

CGI war schon immer eine Notlösung und wird eine Krücke bleiben (auch 
FastCGI), deshalb verwenden die meisten heute direkt Module die in den 
Webserver geladen werden (python,php,perl etc.). Abgesehen davon dürfte 
eine PHP/Python/Server-Umgebung Qt vom Umfang her deutlich sprengen. 
Damit bloatest Du deine Anwendung wirklich und Du schlägst Dich noch mit 
User-Firewallproblemen, Sicherheitslücken und den Userrechten rum.

Also im Ernst, ich glaube der Qt-Overhead ist deutlich kleiner als das 
Webinterface. Und wenn Du Java nicht magst, die Java-Runtime nicht auf 
dem Zielsystem verfügbar ist und es Dir dann zu bloated wird oder aus 
Anforderungen heraus nicht verwenden kannst (Hardwarenah, Performance, 
Assembler etc.) würde ich bei Qt bleiben.

Jetzt kommt noch dazu, dass wenn Du keine Ahnung von CSS,JavaScript und 
HTML hast Du sehr viel Lernzeit brauchen wirst um wirklich ansprechende 
und mit allen Browsern kompatiblen Interfaces zu machen. Und selbst wenn 
Du Dich an alle Standards hältst, wird Dir die nächste Browserversion 
garantiert einen Strich durch die Rechnung machen. Genau genommen machst 
Du dich wesentlich Plattformabhängiger als ohne, denn Du wirst für fast 
jede IE-Version ein eigenes CSS brauchen wenn Du die Maßstäbe wie an 
eine Qt-/Swing-GUI setzt.

Es gibt IMHO genügend dieser Anwendungen (so Ende der Neunziger war es 
"in" sich in seine Anwendung ein Browser-Fenster zu embedden) die sich 
mit "Notnagel-HTML" und einem CGI-Call das leben selbst schwer machen 
und wir brauchen IMHO nicht noch mehr davon. Keine 
Standalone-Anwendungen mit Webinterface, das ist Quark (und natürlich 
nur eine subjektive Meinung). Vllt. wenn man im Webbereich mal den 
Standardisierungsgrad und vor allem auch die Bindewirkung eines 
Standards erreicht hat wie in anderen Bereichen. Webentwicklung ist 
heutzutage eine echte Krücke. Ich bin echt mal auf die neuen Win8-HTML5 
Apps gespannt. Das wird echt Freude machen... ;)

von Fer T. (fer_t)


Lesenswert?

Danke alle zusammen :D

@ Ernst:
Ich möchte das ja nicht auf einem Server laufen lassen, und nicht über 
"Websprachen" ansprechen, sondern der Webserver, welcher lokal läuft, 
soll ja einfach nur die GUI-Brücke darstellen, das Programm selber ist 
ja in C / C++ geschrieben.

@ Mrx:

Also HTML und CSS sind keine Probleme, ich würde mal behaupten, dass ich 
mich da ganz gut auskenne, muss zwar bei einigen Sachen in der Referenz 
nach gucken, aber ist an sich kein Problem. Auch PHP ist kein Problem, 
solange es um Standard-Sachen geht.

Ich wollte das über den Browser machen, weil ich dachte so könnte ich 
schneller eine GUI erstellen (und einfacher) als wenn ich es per QT 
programmiere, vor allem weil ich beim Browser ja nur ein Layout machen 
muss und dann einfach die C Dateien als CGI einbinde (Umgebungsvariable 
als Input und gut ist).
So gesehen war mein Beweggrund der, dass ich für all die kleinen 
Programme nicht unbedingt immer die GUI in QT schreiben wollte/will weil 
das sehr Zeitaufwendig ist, bez. aufwendiger als eine einfache HTML 
Seite.

MfG
Fer

von Εrnst B. (ernst)


Lesenswert?

Fer T. schrieb:
> Ich möchte das ja nicht auf einem Server laufen lassen, und nicht über
> "Websprachen" ansprechen,

Ob der Webserver lokal oder sonstwo läuft, ist dem erstmal wurscht. Und 
dir eigentlich auch, die Programmierung bleibt die gleiche.
und um die "Websprachen" HTTP, HTML, CSS kommst du nicht herum, wenn du 
einen Web-Browser zum Anzeigen verwenden willst. Der kann nämlich nix 
anderes.

>  sondern der Webserver, welcher lokal läuft, soll ja einfach nur die GUI-
> Brücke darstellen, das Programm selber ist
> ja in C / C++ geschrieben.

d.H. du brauchst jetzt drei Programme wo vorher eins nötig war.
1) Einmal dein C / C++ Programm, mit der RS232-Schnittstelle.
2) Einmal den Webserver + CGIs/PHP-Scripte/Sonstwas, die sich per IPC 
mit deinem Programm verbinden.
3) Einmal den Webbrowser, der sich mit HTTP an den Webserver verbindet.

Wenigstens 1 und 2 kann man zusammenfassen, wenn man den HTTP-Server 
direkt in dein Programm integriert. Das war mein Vorschlag mit der QT. 
QT einfach weil du sie schon kennst, und RS232, HTTP sowie 
Multithreading damit unproblematisch sind.

3 kannst du auch integrieren, QT hat nen WebBrowser-Widget, dann lässt 
sich auch der Netzwerk-Teil dazwischen einsparen ;)

von Fer T. (fer_t)


Lesenswert?

Εrnst B✶ schrieb:
> und um die "Websprachen" HTTP, HTML, CSS kommst du nicht herum, wenn du
> einen Web-Browser zum Anzeigen verwenden willst. Der kann nämlich nix
> anderes.

Das ist mir ja auch bewusst, ich meinte, das ich Sprachen wie PHP jetzt 
nicht extra benutzten will (was übrigens ein installiertes PHP benötigt, 
das wäre ja wieder mehr Ballast).

> d.H. du brauchst jetzt drei Programme wo vorher eins nötig war.
> 1) Einmal dein C / C++ Programm, mit der RS232-Schnittstelle.
> 2) Einmal den Webserver + CGIs/PHP-Scripte/Sonstwas, die sich per IPC
> mit deinem Programm verbinden.
> 3) Einmal den Webbrowser, der sich mit HTTP an den Webserver verbindet.
>
> Wenigstens 1 und 2 kann man zusammenfassen, wenn man den HTTP-Server
> direkt in dein Programm integriert. Das war mein Vorschlag mit der QT.
> QT einfach weil du sie schon kennst, und RS232, HTTP sowie
> Multithreading damit unproblematisch sind.

1 und 2 würde ich ja dann auch zusammenfügen, aber 3 würde ich extra 
lassen, sollte ja überall drauf sein.
Mir ging es ja hauptsächlich darum Arbeit zu sparen, da ich mich mit QT 
nicht so gut auskenne wie mit HTML, CSS (und "normalen" C/C++).
Ich will ja keine High-End Programme mit der GUI schreiben, sonder nur 
für kleinere benutzen, da wo sich QT vom Zeitaufwand nicht lohnt.
[1]Wenn ich QT benutze, dann würde ich ja auch nicht diese Web-GUI 
benutzen, sonder richtig mit QT eine schreiben.
Und nebenbei brauche ich dann keine extra Bibiliotheken (QT) für diese 
"Mini-Programme", da ich nur den Server integrieren muss (einzelnt 
compiliert ist der als Binär Datei dann 12 Kb groß.).

>
> 3 kannst du auch integrieren, QT hat nen WebBrowser-Widget, dann lässt
> sich auch der Netzwerk-Teil dazwischen einsparen ;)
siehe [1]

Trotzdem danke.

Evtl. brauch ich das ja auch nicht immer so zu machen, dazu müsste ich 
einfach nur schneller QT GUIs schreiben ;-)

MfG

von mrx (Gast)


Lesenswert?

Fer T. schrieb:
> Danke alle zusammen :D

> @ Mrx:
>
> Also HTML und CSS sind keine Probleme, ich würde mal behaupten, dass ich
> ...
>

Okay, dann fällt der Aufwand ja schonmal weg.

> Ich wollte das über den Browser machen, weil ich dachte so könnte ich
> schneller eine GUI erstellen (und einfacher) als wenn ich es per QT
> programmiere, vor allem weil ich beim Browser ja nur ein Layout machen
> muss und dann einfach die C Dateien als CGI einbinde (Umgebungsvariable
> als Input und gut ist).
> So gesehen war mein Beweggrund der, dass ich für all die kleinen
> Programme nicht unbedingt immer die GUI in QT schreiben wollte/will weil
> das sehr Zeitaufwendig ist, bez. aufwendiger als eine einfache HTML
> Seite.

Naja, musst letzten Endes Du entscheiden. Aber wenn Du es halbwegs 
ordentlich machen willst, musst Du vermutlich wesentlich mehr Zeit 
investieren. Ich schätze den reinen Erstellungsaufwand der GUI als 
ähnlich hoch ein wenn ein Entwickler beides gleich gut beherrscht, desto 
komplexer die GUI desto höher wird der Aufwand für das Web-GUI. Viele 
Dinge sind schlichtweg garnicht realisierbar. Solltest Du des Weiteren 
z.B. PHP verwenden, musst Du Dich auch noch mit der Webserver- und 
PHP-Konfiguration ausseinandersetzen. Sonst installierst Du dem Enduser 
einen Webserver der auch noch im Netz lauscht und Anfragen beantwortet 
die Du überhaupt nicht beantworten willst.
Jetzt stell Dir vor, das macht jeder Entwickler so. Dann hat jeder User 
nacher 10 Webserver auf dem Rechner die vermutlich noch alle auf dem 
Standardport lauschen wollen und nichts funktioniert mehr. Ich halte das 
einfach für keine gute Praxis. Und jeden einzelnen kannst Du dann 
anfangen separat zu patchen, denn PHP-Security-Fixes gibt es alle paar 
Tage. Und das alles für ein "kleines Tool"?

Ich will Dich nicht daran hindern deine Erfahrungen zu machen, aber 
bedenke was Du dir und dem User wirklich damit aufbürdest.

von Karl H. (kbuchegg)


Lesenswert?

> Ich wollte das über den Browser machen, weil ich dachte so könnte
> ich schneller eine GUI erstellen (und einfacher)

Ich habs einmal probiert und das Ergebnis war ernüchternd.

Nicht nur hab ich 10 mal solange gebraucht, bis die Formulare und alles 
sonstige so einigermassen ausgesehen haben, wie ich wollte. Auch die 
Interaktion von einzelnen Controls die sich gegenseitig beeinflussen war 
einfach nur ein Horror.

Da bist du mit jedem Resource Designer um Längen schneller.
Zumindest ist es mir so ergangen.
Wenn man dann ein wenig Übung hat, ist so ein Resource Designer (oder 
eben mit dem Resource Studio von DevStudio, bin ein MFC Mensch) 
schneller hochgefahren als du Papp sagen kannst.
Ganz zu scheigen von den vielen Dingen die dann auch noch schief gehen 
können, wenn mehrere Programme wie Browser, Server etc. zusammenarbeiten 
müssen.

Wir haben in der Firma gerade ein neues Zeiterfassungssystem gekriegt 
:-) basierend auf einer HTML Oberfläche.
Gut. Man kann von jedem Arbeitsplatz auf das Kästchen neben der Tür 
zugreifen, aber ansonsten würd ich das Teil liebend gerne beim Fenster 
rauswerfen. Lahm bis zum geht nicht mehr, die Oberfläche ist 
hauptsächlich bunt, scheusliche Bedienung.

von Fer T. (fer_t)


Lesenswert?

Ok,
Ich muss da mal gucken...

Auf jeden fall sehe ich es auch ein, dass es ziemlich bekloppt wäre wenn 
es so kommen würde wie mrx gesagt hat (wenn jeder es so machen 
würde...)...
Naja wie gesagt gucke mal ob es so klappt wie gedacht, sonst, bez. so 
oder so, muss ich mal näher mit QT auseinander setzten, evtl. schaffe 
ich dann GUIs auch damit schneller...

Nicht hauen:
Zu meiner Windows Zeit fand ich aus dem Grund VB sehr gut, was mir jetzt 
auch in diesen Situationen verlockend vor kommt, auch wenn es vom sich 
aus recht ?!*'+ ist...

Bin dann mal QT Guids lesen...
MFG

von Karl H. (kbuchegg)


Lesenswert?

Fer T. schrieb:

> Nicht hauen:
> Zu meiner Windows Zeit fand ich aus dem Grund VB sehr gut, was mir jetzt
> auch in diesen Situationen verlockend vor kommt, auch wenn es vom sich
> aus recht ?!*'+ ist...

Warum soll man dich dafür hauen?

VB war immer schon dafür bekannt, dass man damit oberflächenlastige 
Appliktionen schnell und einfach zusammenklopfen kann.

Heute hat C# diesen Part übernommen oder zumindest möchte MS das wohl so 
haben. Und das muss man neidlos anerkennen: Es geht wirklich verdammt 
flott und komfortabel, da eine GUI zusammenzustricken.

Wenn man nicht immer dieses Riesen-.Net Zeugs mitschleppen müsste :-)

von Fer T. (fer_t)


Lesenswert?

Ja, NET ist nicht gerade "schlank"... hatte damals ein Spiel 
geschrieben, da brauchte jeder Nutzer leider die NET Bibliothek... wie 
viel sind das? 100MB? 200MB?

Naja hatte mich auch mal mit KBasic beschäftigt (wie VB), 
plattformunabhänig -> Kann auch für Mac und Windows kompiliert werden, 
kostete glaube ich 20€ Linux war kostenlos... War ganz nett, da jeder 
Programm in C++ übersetzt wurde... dafür wurden auch immer "nur" 6,8 MB 
mitgeschleppt. Aber ist auch nicht das wahre.

Ne ich hatte das Prinzip halt öfters gesehen (früher die Software der 
T-Com, jetzt in letzter Zeit der Gutenprint Treiber...)... Hab mich 
jetzt dazu entschieden erst mal wenn es passt doch lieber in QT zu 
investieren (Zeit), da es doch Vorteile hat.
MFG

von Arno (Gast)


Lesenswert?

Hallo,

ich denke Qt ist die richtige Wahl.

Wenn du was neues und hippes machen willst, kannst du dir auch node.js 
ansehen. Da kannst du in javascript programmieren, eine GUI machen und 
auf serielle Ports zugreifen:

http://nodejs.org/
https://github.com/creationix/topcube
https://github.com/voodootikigod/node-serialport

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.