Entwickler-Ecke

Internet / Netzwerk - Blockierendes UDP Socket ->Probleme?


Flamefire - Mi 13.01.10 22:33
Titel: Blockierendes UDP Socket ->Probleme?
Habe z.Zt. Folgendes vor:
Damit mein Vater über Skype mit seinen Eltern telefonieren kann, richte ich auf deren PC Wake On LAN ein.
Jetzt kann ich mit einem einfach Delphi-Programm den anderen PC hochfahren. Skype wird gestartet, es klingelt, alles super.

Jetzt sind die aber mal nicht da, der PC läuft. Dumm. Also muss ich ihn wieder runterfahren.
Da ich für WOL schon einen Port durchleiten muss, wollte ich jetzt einfach ein Mini-Programm schreiben, dass im Hintergrund läuft und auf einen Schlüssel in einem Paket an dem Port lauscht und dann den PC runterfährt.

Eigendlich sollte dafür doch ein Konsolenprogramm und ein blockierendes UDP-Server-Socket reichen.
Also mit RecvFrom am Socket hängen und alle Pakete abfangen, prüfen, handeln.

Frage ist jetzt: Wie kriege ich es hin, dass kein Konsolenfenster mit der Meldung "Programm reagiert nicht mehr" offen bleibt? Im Hintergrund wäre es schön (man braucht nix sehen), aber wie geht das?
Dann wäre noch: Gibt es Timeouts o.ä. was mir den Spaß vermießen könnte? Und was ist beim normalen Herunterfahren des PCs? Bleibt der dann hängen, weil das Programm blockiert?


FinnO - Mi 13.01.10 22:49

Vorsichtig geantwortet:

Multithreadening?


Flamefire - Mi 13.01.10 23:17

eigendlich nicht nötig. Ich habe ja kein Problem damit, dass er blockiert. Er soll ja nix andres machen, außer horchen ^^


BenBE - Mi 13.01.10 23:38

Und wozu ein Blocking Socket nehmen? Würde das eher über ein Non-Blocking-Socket regeln ...

Ansonsten Über ein Sockeet-Timeout handhaben und immer beim Timeout App.ProcessMsgs aufrufen ...


Astat - Do 14.01.10 10:12

user profile iconFlamefire hat folgendes geschrieben:
Frage ist jetzt: Wie kriege ich es hin, dass kein Konsolenfenster mit der Meldung "Programm reagiert nicht mehr" offen bleibt?


Hi, lösch einfach in der *.dp deiner Console folgenden Eintrag.


Delphi-Quelltext
1:
{$APPTYPE CONSOLE}                    


lg. Astat

Moderiert von user profile iconNarses: Zitat repariert.


Xentar - Do 14.01.10 11:14

Wie liest du Daten aus dem Socket? Normalerweise kann man da noch nen Timeout angeben. Diesen dann auf 100ms oder so setzen, und das ganze regelmäßig ausführen.

user profile iconAstat hat folgendes geschrieben Zum zitierten Posting springen:
Hi, lösch einfach in der *.dp deiner Console folgenden Eintrag.

Delphi-Quelltext
1:
{$APPTYPE CONSOLE}                    

Naja.. dann bleibt halt ein Windows Fenster offen, dass nicht mehr reagiert.. :D
Ging ihm nicht um die Konsole, sondern wohl darum, dass die Software nicht mehr reagiert.


Xearox - Do 14.01.10 15:54

also, ich kenne mich mit Delphi so gut wie garnicht aus, aber nur so als Idee...
Wie wäre es denn mit einem, hmm...sagen wir mal, idle Programm...

Das Programm, wie auch der Bildschirm schoner, prüft, ob irgendetwas am pc gemacht wird.
Ob die Maus zu bewegen oder eine Taste zu drücken...
Falls nichts dergleichen Passiert, wird der PC einfach herunter gefahren, so wie das auch in der Energie verwaltung steht,...
bspw. nach 20min wird Bildschirm ausgemacht, nach 60min fährt der PC runter.

denn ich sag mal so, wenn man skyped, dann drückt man sicherlich irgendwann mal eine taste, oder berührt die maus...
oder man prüft, ob sich da sound technisch was tut...

also irgend sowas...


elundril - Do 14.01.10 16:33

naja, ich denke das der PC sozusagen nur als Ausgang ins Internet dient und der PC von dem sein Vater skyped per Netzwerk mit dem Ausgang verbunden ist. Also muss man weder Tasten drücken noch mäuse bewegen.

lg elundril