Input/Output tcp-Server mit statischer Parallelität

minzee

Bekanntes Mitglied
Hi :)

In meinem Buch gibts folgende Server-Klasse:
Java:
class ParallelStaticServer
{
   private static final int NUMBER_OF_SLAVES = 20;
   public static void main()
   {
      ServerSocket serverSocket = null;
      Counter counter = new Counter(); 
      // dort gibts nur eine zähler-Variable mit synchronized setter und getter

      try
      {
         serverSocket = new ServerSocket(1250);
      }
      catch(Exception e)
      {
         return;
      }

      for(int i = 0; i < NUMBER_OF_SLAVES; i++)
      {
         Thread t = new StaticSlave(serverSocket, counter); 
         // Thread-Klasse mit Endlosschleife, nimmt Client-Requests entgegen
         t.start();
      }
   }
}
Was hier passiert, ist euch Profis sicher sowieso klar. Ein Server, der 20 Clients bedienen kann.

Was mir hier aber fehlt, ist ein close beim serverSocket. Bei den anderen Server-Varianten im Buch passiert immer irgendwo ein close, nur in dieser Klasse nicht. Sollte da nicht irgendwo ein close stehen, wenn man das schön ausprogrammiert?
 
Zuletzt bearbeitet:

minzee

Bekanntes Mitglied
Was steht denn in der Klasse StaticSlave ?
Darin ist eine Endlosschleife, worin dann auf eingehende Verbindung gewartet wird.

Angenommen, ich starte den Server, beende den Server, starte den Server, beende den Server ... und mache das 1000 x hintereinander, ohne den Rechner selbst irgendwann neu zu starten. Wird dann immer mehr vom RAM belegt, weil ich für diesen socket nie ein close mache? Oder hat das sonst irgendwie Auswirkung auf TCP oder das Betriebssystem?
 

lawila

Gesperrter Benutzer
ich liebe solche fragen ... sie zeigen immer sehr schön das der fragen absolut gar keine ahnung davon hat wie moderne systeme funktionieren ...

ich würde dir empfehlen dich mal mit der grundlegenden arbeitsweise eines systems zu beschäftigen bevor du weiter den gedanken daran verschwendest einem rechner sagen zu wollen was er zu tun und zu lassen hat ... denn nichts anderes bedudetet das wort "programmieren"
 

minzee

Bekanntes Mitglied
Bei einem gesperrten Benutzer kann ich wohl nicht mehr weiter nachfragen, was er damit eigentlich gemeint hat ...
 
Zuletzt bearbeitet:

fischefr

Aktives Mitglied
Darin ist eine Endlosschleife, worin dann auf eingehende Verbindung gewartet wird.

Angenommen, ich starte den Server, beende den Server, starte den Server, beende den Server ... und mache das 1000 x hintereinander, ohne den Rechner selbst irgendwann neu zu starten. Wird dann immer mehr vom RAM belegt, weil ich für diesen socket nie ein close mache? Oder hat das sonst irgendwie Auswirkung auf TCP oder das Betriebssystem?

Ist die streng geheim, oder kannst du die mal posten?

Mal angenommen der Code darin sieht so aus, wie ich mir den nach deiner obigen Aussage vorstelle, dann darf der Serversocket erst geschlossen werden, wenn kein einziger Client mehr verbunden ist oder sich verbinden können soll. Sprich: beim Beenden des Programms.

Das Beispiel ist in einer Hinsicht sowieso sehr negativ: Ein Java-Programm terminiert, sobald der letzte nicht-daemon-Thread terminiert. Vermutlich benutzt die von dir unterschlagene Klasse keine daemon-Threads. In dem Fall läuft die Anwendung bis sie mit Strg+C abgebrochen wird oder System.exit() ausgeführt wird. Sehr unschön!

Angenommen, ich starte den Server, beende den Server, starte den Server, beende den Server ... und mache das 1000 x hintereinander, ohne den Rechner selbst irgendwann neu zu starten. Wird dann immer mehr vom RAM belegt, weil ich für diesen socket nie ein close mache? Oder hat das sonst irgendwie Auswirkung auf TCP oder das Betriebssystem?

Das Schlimmste, was dir passieren kann ist, dass beim nächsten Start deines Programm der Port des Servers fürs Betriebssystem noch belegt ist und dir das Programm mit einer Exception um die Ohren fliegt. Nach einer gewissen Zeit sollte der dann vom Betriebssystem wieder freigegeben werden. Beim RAM hast du kein Problem. Sobald die Java-VM beendet wird, kümmerst sich das Betriebssystem darum, dass der wieder freigegeben wird. Darauf hast du keinen Einfluß.

linux - How to avoid java.net.BindException: Address already in use - Stack Overflow
 
Zuletzt bearbeitet:

minzee

Bekanntes Mitglied
Wäre es vielleicht besser, keine Endlosschleife zu programmieren? Statt dessen eine Schleife, in der immer kontrolliert wird, ob in der Konsole etwas eingegeben wird. Und wird z. B. "end" eingegeben, dann verlässt man die Schleife und macht den close?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
FireHorses Benutzernamen aus PrivateChannel(Interaction) auf Server bringen Java Basics - Anfänger-Themen 0
HolyFUT Best Practice Architektur WebSocket Server Java Basics - Anfänger-Themen 1
S Server Java Basics - Anfänger-Themen 4
S Server Java Basics - Anfänger-Themen 3
D Verbesserungsvorschläge zur Struktur einer Client Server Desktop Chat App Java Basics - Anfänger-Themen 24
D Unerwartetes Verhalten bei Client Server Chat App Java Basics - Anfänger-Themen 12
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
M CS GO Server mit Java steuern Java Basics - Anfänger-Themen 3
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
B DHCP-Server Adresse ermitteln Java Basics - Anfänger-Themen 4
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
S Server - für jeden Client ein Serverthread Java Basics - Anfänger-Themen 2
G sql server connection mit windows authentication Java Basics - Anfänger-Themen 2
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
L Erste Schritte Erste Versuche mit Server und Client Java Basics - Anfänger-Themen 7
elischa Client-Server IO und Stream Steuerung ? Java Basics - Anfänger-Themen 2
U Erste Schritte Server will nicht übergebenes Objekt speichern Java Basics - Anfänger-Themen 5
B IP Adresse von Wildfly Server Java Basics - Anfänger-Themen 1
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
I Print Client -> Server -> Client? Java Basics - Anfänger-Themen 1
I lokales Programm mit Client/Server Programm kommunizieren Java Basics - Anfänger-Themen 3
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
F String zu einem Server senden Java Basics - Anfänger-Themen 4
N Server Zeit zur lokalen Zeit setzen. Java Basics - Anfänger-Themen 0
J TCP MultiThreaded Server und Client - irgendwo ist der Fehler, aber ich find ihn nicht Java Basics - Anfänger-Themen 3
I ical - Datei auf Server ablegen und Kalender abbonieren Java Basics - Anfänger-Themen 0
T Eclipse - GlassFish Server!? Java Basics - Anfänger-Themen 1
I Java Server Faces mit Glassfish Webseite veröffentlichen Java Basics - Anfänger-Themen 4
G Multiple Clients and one Server Java Basics - Anfänger-Themen 2
K Java Client > Python Server Java Basics - Anfänger-Themen 0
F jabva 7.21 läuft nicht auf windows server 2012? Java Basics - Anfänger-Themen 9
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
S Java - Client/Server mit Stomp kurze Frage Java Basics - Anfänger-Themen 0
I JDK SERVER -jar stoppen Java Basics - Anfänger-Themen 5
Screen Wie Propertydatei im Server beschreiben? Java Basics - Anfänger-Themen 7
K threaded server Java Basics - Anfänger-Themen 18
E Client Server Java Basics - Anfänger-Themen 12
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
L Chat server Java Basics - Anfänger-Themen 4
O Server Client Problem Java Basics - Anfänger-Themen 2
B Java Server Side Java Basics - Anfänger-Themen 14
H Java Server/Client, HTML Seite anzeigen Java Basics - Anfänger-Themen 2
L Server pingt Client und fordert Info Java Basics - Anfänger-Themen 2
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
A Server logs auslesen Java Basics - Anfänger-Themen 6
Z Threads, Server, GUI Java Basics - Anfänger-Themen 4
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
M Java class auf Server starten Java Basics - Anfänger-Themen 5
U Java-Programm auf einem Server starten Java Basics - Anfänger-Themen 33
D Java Applet Dateien auf Server auslesen? Java Basics - Anfänger-Themen 8
X Applet - Client/Server Java Basics - Anfänger-Themen 2
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
N Methoden Test ob Server vorhanden ist Java Basics - Anfänger-Themen 4
S .Bat Server von .java Starten Java Basics - Anfänger-Themen 5
L Server mit mehreren Clients Java Basics - Anfänger-Themen 25
L Bild versenden über Client/Server Java Basics - Anfänger-Themen 10
S Klassen Server und Client Java Basics - Anfänger-Themen 3
M Client - DB-Server Struktur Java Basics - Anfänger-Themen 7
M daytime-Server Port 13 Java Basics - Anfänger-Themen 2
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
O (von Applet) daten an Server übergeben Java Basics - Anfänger-Themen 4
W mehrere clients auf einem server Java Basics - Anfänger-Themen 2
R Server-Daten sichern/verschlüsseln Java Basics - Anfänger-Themen 10
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
V pfad.exists() gilt nicht für "//server/a/xyz.jpg"? Java Basics - Anfänger-Themen 12
F SQL Server aus Umlaute werden Fragezeichen Java Basics - Anfänger-Themen 4
S FTP Server Java Basics - Anfänger-Themen 3
P Application Server Java Basics - Anfänger-Themen 3
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7
C Bilder von Server zu Server kopieren über Webdav(Sardine) Java Basics - Anfänger-Themen 5
H Java-Server mit Browser ansprechen Java Basics - Anfänger-Themen 19
M Standard-Klassen auf Server nicht verfügbar Java Basics - Anfänger-Themen 7
Spin Server Location is not an Sun Java System Application Server 8.2 Java Basics - Anfänger-Themen 2
Dit_ Daten vom Server in einer Schleife Java Basics - Anfänger-Themen 4
S In Eclipse relativen Pfad fuer Tomcat Server erstellen..? Java Basics - Anfänger-Themen 3
M Verbindung zu einem Server über Eclipse Java Basics - Anfänger-Themen 6
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4
G Sessionüberprüfung funktioniert lokal aber nicht auf dem Server! Java Basics - Anfänger-Themen 12
S Chat-Server Java Basics - Anfänger-Themen 6
S Java Applet - Verbindung zum Eigenen Server Java Basics - Anfänger-Themen 2
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
M Socket Server Java Basics - Anfänger-Themen 9
M Problem: JSP für Zugriff auf Oracle-Server/Datenbank - sinnvoll? Java Basics - Anfänger-Themen 35
B Server-Client mit Thread ausstatten Java Basics - Anfänger-Themen 3
brainray Einfachen RMI Server bei einem Provider zum Laufen bringen Java Basics - Anfänger-Themen 3
brainray Server abbrechen mit CTRL-C Java Basics - Anfänger-Themen 2
H Server & Applet Java Basics - Anfänger-Themen 11
Tandibur Server führt "try-catch" nicht aus Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben