Socket Aufhängen beim Lesen

Bizarrus

Bekanntes Mitglied
Huhu..

Ich hab da irgendwie ein kleines Problemchen...

Ich bin derzeit dabei, eine Server/Clientarchitektur zu erstellen.
Ich habe in der Run-Methode eine while-Schleife erstellt und lese dort die verfügbaren Bytes aus.

Kurios ist, dass wenn ich zwei mal den Clienten öffne und diese verbunden sind, alles aufeinmal anfängt zu laggen. Der ganze Rechner wird lahm...

Java:
public void run() {
    	while(true) {
    		int length;
			try {
				length = stream_input.available();
				if(length != 0 && length != -1) {
					byte[] bytes = new byte[(int) length];
					stream_input.read(bytes, 0, bytes.length);
					if(bytes.length != 0 && bytes.length != -1) {
						System.out.println("Read Bytes: " + bytes.length);
						System.out.println(new String(bytes));
						Server.send(new String(bytes));
					}
				}
			} catch (IOException e) {
				System.err.println("[ERROR] (run) :: " + e);
			}
    	}
    }

Ich denke mal dass es nur hierran liegen kann... Kann des sein, dass read irgendwie blockt und ich dies in einem Thread auslagern muss?
 

Empire Phoenix

Top Contributor
Da du vorher auf avialbe prüfst wird es nicht blocken denke ich,
ABER da es while(true) ist wird es einen gesamten cpu core verschwenden um ständig zu testen ob was da ist.
Wenn du nun zweimal startest ist dein Dualcore(richtig geraten du haste einen oder?) vollkommen totgelegt.

Kannst aj testweise mla ein Thread.sleep(10) einbauen, wenn dann das extrem laggen wech ist , ist dies die ursache

-> Eigenen Thread zum lesen benutzen, der dann blockiert, solange nichts zum lesen vorhanden ist, (also direkt read ohne aviable übeprüfung)
 

Bizarrus

Bekanntes Mitglied
Quadcore hab ich.

Wie kann ich read denn ohne eine angabe nutzen? Man muss doch wissen, wieviel gelesen werden soll...
Ich kanns ja nicht einfach begrenzen, da einige Daten sehr groß sein können. Wir sprechen also nicht von beispielsweise max. 1024 bytes, sondern es kommt auch mal vor, dass es dann vielleicht mal 1024 * keine ahnung was ist...

Wie kann ich das Problem denn am besten bewerkstelligen?
 
I

irgendjemand

Gast
hmm ...
da hat der phönix aber in seinem aschehaufen nicht ganz recht


read() ist eine BLOCKIERENDE methode ... sie blockt so lange bis wieder was zu lesen da ist ...
heißt also : selbst wenn das ganze in while(true) steht ist es keine 100% auslastung eines cores da die meiste zeit auf I/O aktivität gewartet wird ...

@TO

ich glaube viel interessanter ist mal der server ... da diser scheinbar mit 2 verbindungen gleichzeitig nicht mehr klarkommt ...

wenn auch das alles nichts hilft solltest du dir noch mal von ganz unten schritt für schritt überlegen wie das ganze ablaufen soll ... und auch dafür sorgen das zwischen einzelnen read-vorgängen genug zeit für andere prozesse bleit und du nicht die gesamte CPU voll auslastest ...


es gibt genug tutorials zu dem thema
 

Empire Phoenix

Top Contributor
Das was ich geschreiben habe war unter der Annahme, das über Netzwerk gelesen wird. In dem fall wäre durch das aviable nie blockierend geworden, da er ja nciht zum read kommt dann.

Interessant wäre am rande noch ob Server.send blockiert

Du kansnt bei read zb angeben, dass du einfach 64 bytes lesen willst. Read blockiert dann entweder bis 64 bytes da sind, oder return vorher, es liefert dir zurück wie viele bytes gelesen wurden.

Javadoc:
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.

If b is null, a NullPointerException is thrown. If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the..
Ps. Anonyme beleidiger... sackgesicht (und ja ich stehe dazu, ich traue mich das ach wenn ich angemeldet bin).
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
A sporadischer Fehler beim Schreiben auf NAS Netzwerkprogrammierung 2
A Automatisches Update beim Starten Netzwerkprogrammierung 1
J Hilfe beim programmiern einer App zur Anmeldung im Wlan-Netzwerk Netzwerkprogrammierung 0
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
M Nur die erste Nachricht kommt beim Server an Netzwerkprogrammierung 11
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
A Probleme beim Klassen-Import von sun.misc. ... Netzwerkprogrammierung 19
B Probleme beim ersten Netzwerkprogramm Netzwerkprogrammierung 3
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
Y RMI Initialisierung beim Server Netzwerkprogrammierung 10
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
DEvent Keine IOException beim schreiben Socket Netzwerkprogrammierung 3
M Authentifizierung beim Start von Java-Applets Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
G Kryptische Zeichen beim Auslesen einer Website Netzwerkprogrammierung 11
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
T ServerSocket bleibt beim lesen von Input hängen Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
S Threads beim Server koordinieren Netzwerkprogrammierung 5
K TrafficClass eines UDP Pakets kommt beim Empfänger nicht an Netzwerkprogrammierung 5
T Pfadangabe beim kopieren übers Netzwerk Netzwerkprogrammierung 5
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
G Blockieren beim Öffnen der In und Outputstreams Netzwerkprogrammierung 2
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
J Was bedeutet: Address already in use: connect (beim client?) Netzwerkprogrammierung 4
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
J Problem beim Senden von File Netzwerkprogrammierung 4
G unbekannte Zeichen beim senden und lesen Netzwerkprogrammierung 2
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
P problem beim schließen eines Streams Netzwerkprogrammierung 6
J RMI Fehler beim Proxy Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
C Session Problem beim Zugriff auf Webseiten Netzwerkprogrammierung 3
J while-Schleife / Abbruchbed. beim Einlesen eines Streams Netzwerkprogrammierung 4
M Fehlende Bits / Bytes beim kopieren Netzwerkprogrammierung 4
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
C RMI: Problem beim Aufruf einer Methode. Falsch gecastet? Netzwerkprogrammierung 8
T RMI - Probleme beim Starten des Clients Netzwerkprogrammierung 4
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
G ActionEvent klappt beim Chat nicht Netzwerkprogrammierung 5
megachucky RMI - AccessControlException beim Naming.lookup() Netzwerkprogrammierung 12
G Probleme mit Firewall beim empfangen von dateien über socket Netzwerkprogrammierung 6
J Problem beim versenden von eigenen Objekten über RMI Netzwerkprogrammierung 2
M sessionhandling beim webserver Netzwerkprogrammierung 5
D Bekomme Dummyspace beim Internetseiten auslesen Netzwerkprogrammierung 2
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
TRunKX Hilfe beim senden und empfangen Netzwerkprogrammierung 2
S Probleme beim Beschränken der Geschwindigkeit Netzwerkprogrammierung 6
M Probleme beim Abfangen von Streams Netzwerkprogrammierung 5
M problem beim schicken von XML-DAtenpacketen via TCP Netzwerkprogrammierung 3
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
B Versuch mit Socket etwas zu lesen und zu schreiben Netzwerkprogrammierung 15
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
I Offene Verbindungen lesen(Ressourcenmonitor lesen) Netzwerkprogrammierung 2
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
C Gerenderte Website nach der ausführung von JavaScript als HTML Code aus lesen Netzwerkprogrammierung 4
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Aus einer URL die Dateien lesen Netzwerkprogrammierung 5
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
J VideoStream von Webseite lesen/speichern Netzwerkprogrammierung 7
J UDP port packete lesen,wenn dieser besetzt ist Netzwerkprogrammierung 3
S Thread, Daten vom Socket lesen Netzwerkprogrammierung 2
Z File über Socket lesen Netzwerkprogrammierung 3
W aktuelle Datum vom Server lesen! Netzwerkprogrammierung 5
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
T Socket Nullterminierten String lesen Netzwerkprogrammierung 4
L Java über php datei lesen? Netzwerkprogrammierung 18
K Vom Socket lesen wenn das Gegenüber schon disconnected ist? Netzwerkprogrammierung 12
M lesen vom Client geht nicht Netzwerkprogrammierung 10
M Bytes aus Stream lesen Netzwerkprogrammierung 3
J Mit der File Api Dateien von anderen Rechnern lesen ? Netzwerkprogrammierung 3
F Netzwerktraffic lesen Netzwerkprogrammierung 16
E RTP Packet lesen - Byte Problem 0xFFFFFF80 statt 0x80 Netzwerkprogrammierung 7
S mit HttpClient Seiteninhalt lesen Netzwerkprogrammierung 8
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
G ProxySettings aus Internet Explorer lesen Netzwerkprogrammierung 8
T Sockets Verständnisfrage: abwechelnd lesen-schreiben Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben