Networking server direkt in python starten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

hi
ich hab einen server-client-code geschrieben.
der server ist in python geschrieben, der client in android (java).
datenübertragung funktioniert. allerdings muß ich den server immer über eine
.bat-datei starten. kann ich den server code auch direkt in python starten, so daß ich
den server code in ein anderes python programm integrieren und dann das komplette programm mit
server starten kann?
BlackJack

@DMD-OL: Warum musst Du den Server über eine *.BAT-Datei starten?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Seit Python 3.3 gibt es den Launcher für Windows.
In der Windows-Konsole:

Code: Alles auswählen

py server.py
Alternativ kannst du das Python Programm auch über den Taskplaner starten. Für Fortgeschrittene gibt es noch die Möglichkeit ein Programm als Systemdienst einzurichten.

Wenn du die Dateiendung auf pyw änderst, kannst du das Programm mit einem Doppelklick starten, aber das Terminal wird in diesem Fall unterdrückt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

das ist alles nicht mein ziel.
ich würde gern den server im hintergrund starten und arbeiten lassen, während ich mit dem main-Programm unabhängig arbeite.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

DMD-OL hat geschrieben:ich würde gern den server im hintergrund starten und arbeiten lassen, während ich mit dem main-Programm unabhängig arbeite.
Da führen viele Wege nach Rom und je nach genauer Anforderung, ist der eine oder andere besser geeignet:
- Server als Subprozess laufen lassen: Vorteil - kann direkt aus Programm heraus gestartet werden, Nachteil - "hängt" am Programm
- Server als Subprozess detached starten: Vorteil - wie oben, Nachteil muss separat beendet werden (hängt nicht am Programmprozess)
- Autostart per Eintrag im Autostart-Ordner: Vorteil - startet automatisch für entsprechende Nutzer, gemeinsame Datenbasis mitunter schwierig wegen verschiedener Zugriffsrechte
- Systemdienst: Vorteil - Serverkomponente ist komplett entkoppelt vom Client, kann automatisch oder von Hand starten, gemeinsame Datenbasis einfach machbar, Nachteil - braucht idR höhere Rechte (Zugriff erfolgte meist über Systemaccounts), bei neueren Windowssystemen werden nur echte Konsolenprogramme unterstützt (falls der Server ein grafisches Interface bekommen soll, muss dieses per IPC mit der Serverkomponente reden, was aufwändiger zu programmieren ist)

Was da für Dich davon am ehesten in Frage kommt, kann ich aus Deiner Beschreibung nicht ableiten.
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

danke. das hilft mich für subprocess zu entscheiden.
was meinst du mit, "hängt" am programm?
wenn das programm beendet wird, wird auch subprocess beendet??? :D :P :shock: :mrgreen:
das möchte ich gerne so haben.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Nein, so einfach ist es nicht. "hängt" meinte ich so, dass die Prozesse sich gemeinsame Ressourcen teilen können (Console, ENV u.a.) Das führt aber nicht dazu, dass der (Server-)Subprozess automatisch beendet wird, wenn Hauptprogramm beendet wird. Dafür wären weitere Einstellungen nötig.

Beschreib Dein Problem mal genauer, ich glaube Du bist mit mit dem Server-aus-dem-Client-heraus-Starten auf dem Holzweg.
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

ich hab das hier nocheinmal neu aufgeführt:

viewtopic.php?f=3&t=39515

ich habe einen servercode UND einen "normalen" programmcode. der server soll im hintergrund starten, daten von meinem handy annehmen und
in eine datenbank schreiben, alles im hintergrund. das funktioniert mit einem Thread. mit dem programmcode will ich während der server läuft parallel arbeiten können.
soweit funktioniert es.
um mich von meinem handy aus an zu melden, habe ich es so gemacht, daß ich ip-adresse und port ins handy eingeben muß.
wenn der programmcode auf meinem pc gestartet wird, wird der server parallel dazu auch gestartet, ich kann also daten von meinem handy aus übertragen und gleichzeitig mit dem hauptprogramm (programmcode) arbeiten.
wenn ich das hauptprogramm beende, soll aber auch der server komplett (mit Thread) geschlossen werden.
wenn ich das hauptprogramm dann erneut starte, wird mir eine neue aktuelle verbindung (ip-adresse und port) angezeigt.
wenn ich die neue verbindung ins handy eingebe, funktioniert alles wunderbar.
nur wenn ich aber die aktuelle verbindung nicht eingebe, funktioniert es eben auch, da eben nicht die aktuell geöffnete verbindung benutzt wird,
sondern irgendeine alte. daher versuche ich, sobald ich im hauptprogramm auf BEENDEN klicke, die jeweils aktive vebindung (thread und socket) zu
killen, töten, VERNICHTEN!!!
das gelingt mir aber leider nicht. :(
Wenn ich also BEENDE will ich eigentlich ALLES NUR TÖTEN, damit man nur die aktuell angezeigte verbindung nutzen kann! :)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@DMD-OL:
Wenn Du den Serverteil als Thread im "normalen" Programmcode auslegst, brauchst Du keinen weiteren Prozess.
Antworten