Problem mit Threads und Sockets

Status
Nicht offen für weitere Antworten.

Fabian23

Aktives Mitglied
Huhu zusammen,

ich habe einen Client und einen Server geschrieben. Der Server empfängt in einem Thread die Clients und startet für jeden Client einen neuen Thread. Der Client hat einen Thread, in dem er auf dem Socket "lauscht".

Jetzt besteht das Problem, dass wenn der Server beispielsweise 2x hintereinander was sendet, dass der Client nur den ersten Befehl erhält. Der zweite scheint im Nirvana zu verschwinden. Kann es sein, dass der Thread auf der Client Seite gerade bei der Abarbeitung des ersten Befehls ist und deshalb vom zweiten gar nichts mitbekommt?

Das Problem ist ziemlich übel, da ich zurzeit auf der Server-Seite hinter jedem Befehl ein Thread.sleep() machen muss, damit die Befehle nicht zu schnell gesendet werden. Dann klappt alles ohne Probleme.

Kann mir jemand sagen, ob ich mit der Vermutung bei den Threads richtig liege und vor allem, wie ich das lösen kann?


Danke und Gruß,
Fabian
 

Stiewen

Aktives Mitglied
Hi Fabian23,

ich kann mir vorstellen, dass du so schnell wie möglich eine Antwort haben willst, aber meinerseits würde ich gerne noch ein paar Source Zeilen sehen ... besonders die, in denen steht, was du mit den Informationen, die du sendest machst...

Danach fällt mir nur noch ein, dass du vll eine Nachricht sendest und dann die Verbinidung im Bezug auf den Srteam ODER das Socket schließt. Würde also wieder unterstützen noch ein paar Zeilen zu posten.

Lösung: Schick am besten noch mal ein wenig Quellcode von Server- und Clientseiten.

MfG Stiewen
 

Fabian23

Aktives Mitglied
Hallo Stiewen,

danke für Deine Antwort. Komme leider jetzt erst dazu, etwas Code zu posten.

Erstmal der Code vom ClientListener:

Code:
public void run() {
  try {
  	this.socket = new Socket(Props.getIP(), 6666);
  	
  	while(true) {	
  		if (this.isInterrupted()) {
  			break;
  		}
  		
  		if (this.socket != null && this.socket.isClosed()) {
  			this.interrupt();
  		}
  		
  		Thread.sleep(10);
  
  		this.input       = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
  		this.printWriter = new PrintWriter(this.socket.getOutputStream(), true);
  		
  		if (this.input.ready()) {
  			line = new StringBuffer(this.input.readLine());
  			
        // ---> Die Bearbeitung der Befehle... Mittlerweile ca. 1000 Zeilen Code <---
  		}
  } catch (InterruptedException e) {
  	e.printStackTrace();
  	this.sendDisconnect();
  	
  	this.interrupt();
  } catch (IOException e) {
  	JOptionPane.showMessageDialog(null, "Client auf Port 6666 konnte nicht geöffnet werden");
  } catch (Exception e) {
  	e.printStackTrace();
  } finally {
  	if (this.socket != null && !this.socket.isClosed()) {
  		try {
  			this.socket.close();
  			this.socket = null;
  		} catch (Exception e) {}
  	}
  }	
}

Und der Code vom ServerClientListener:

Code:
public void run() {		
  try {
  	while(true) {		
  		if (this.isInterrupted()) {
  			break;
  		}
  		
  		if (this.socket != null && this.socket.isClosed()) {
  			this.interrupt();
  		}
  		
  		Thread.sleep(10);
  		
  		in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
  		pw = new PrintWriter(this.socket.getOutputStream(), true);
  		
  		if(this.in.ready()) {
  			line = new StringBuffer(in.readLine());
  		
  		  // ---> Die Bearbeitung der Befehle... Mittlerweile ca. 1500 Zeilen Code <---	
  	  }
  } catch (InterruptedException e) {
  	e.printStackTrace();
  	
  	this.interrupt();
  } catch (SocketException socketException) {
  	//TODO
  } catch (Exception exception) {
  	exception.printStackTrace();
  } finally {
  	if (this.socket != null && !this.socket.isClosed()) { 
  		try {
  			this.socket.close();
  			this.socket = null;
  		} catch (Exception e) {}
  	}
  }
}

Problem ist, dass wenn ich vom Server beispielsweise zwei Befehle direkt hintereinander zum Client schicke, der zweite Befehl im Nirvana verschwindet. Ich hab' mir das bis jetzt so gedacht, dass der Thread auf der Client-Seite immer noch am Abarbeiten ist oder gerade schläft und gar nichts von dem zweiten Befehl mitbekommt. Könnte das sein? Und wenn das das Fall ist, wie kann das ich das beheben, weil dadurch natürlich das Protokoll nicht zuverlässig ist.


Danke und Gruß,
Fabian
 

Stiewen

Aktives Mitglied
Hi Fabian23,

also als ich gelesen habe, dass du denkst, dass Java zu langsam ist um zwei Befehle nacheinander zu empfangen, dachte ich: Was ist das denn für ein Idiot! :-D Jetzt, wo ich gelesen habe, dass du 1500 Zeilen dazwischen hast, würde ich mich am liebsten aus diesem Thread entfernen, weil ich keine Ahnung hab, ob das jetzt stimmt, was ich mir so denke, also leg das jetzt nicht auf die Goldwage:

1. Meiner Meinung nach, wäre die Bearbeitung von 1500 Zeilen Source dazwischen echt sehr viel ...

andererseits:

2. Ich denke, dass die Nachricht "wartet", bis sie angenommen wird, also in Form von BufferedReader.read() und erst nach ein paar Sekunden verwirkt.

Lösung a) : (Kannst du die Zeilen nicht kürzen dazwischen? Oder die Aufgaben auf 2 Threads ausbauen? Is zwar unlogisch, aber wenns am ende funzt... ) --> Nur, wenn das genannte 1. stimmt.

Lösung b) : (Dein Prob muss irgendwo anders liegen.. sry, weiß net wo.) --> wenn genannte 2. stimmt
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G 1 Socket 2 Threads problem Netzwerkprogrammierung 13
K Problem mit Threads Netzwerkprogrammierung 3
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben