Kann nicht Daten vom Server lesen Socket

Z

ZeusSeinGrossopa

Gast
Hi,

ich habe einen Socket Server programmiert. Dort funktioniert alles mit Daten versenden oder Daten lesen.
Beim Client jedoch kann man Daten an den Server versenden, aber keine Daten von dem Server lesen.

Dies ist die Fehlermeldung:

[Thread-7/INFO]: [STDERR] at java.net.SocketException: Socket closed [Thread-7/INFO]: [STDERR]: at java.net.SocketInputStream.socketRead0(Native Method) [Thread-7/INFO]: [STDERR]: at java.net.SocketInputStream.socketRead(Unknown Source) [Thread-7/INFO]: [STDERR]: at java.net.SocketInputStream.read(Unknown Source) [Thread-7/INFO]: [STDERR]: at java.net.SocketInputStream.read(Unknown Source) [Thread-7/INFO]: [STDERR]: at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) [Thread-7/INFO]: [STDERR]: at sun.nio.cs.StreamDecoder.implRead(Unknown Source) [Thread-7/INFO]: [STDERR]: at sun.nio.cs.StreamDecoder.read(Unknown Source) [Thread-7/INFO]: [STDERR]: at java.io.InputStreamReader.read(Unknown Source) [Thread-7/INFO]: [STDERR]: at java.io.BufferedReader.fill(Unknown Source) [Thread-7/INFO]: [STDERR]: at java.io.BufferedReader.readLine(Unknown Source) [Thread-7/INFO]: [STDERR]: at java.io.BufferedReader.readLine(Unknown Source) [Thread-7/INFO]: [STDERR]: at de.database.SocketReader.run(SocketReader.java:37)

Wenn
reader.readLine();
ausgeführt wird, dann schließt sich der Socket.

Mein Code:
Java:
        try {
            InputStream in = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
           
            while(!socket.isClosed()) {
                String s = reader.readLine();
                if(s != null) {
                    System.out.println("Nachricht vom Server: " + s);
                }
            }
        } catch(IOException e) {
            e.printStackTrace();
        }

Kann mir jemand helfen den Fehler zu beheben, das ich die Daten lesen kann und der Socket nicht geclosed wird?

Danke für eure Hilfe!
 
K

kneitzel

Gast
Zeig den Code vom Server. Und ggf. noch mehr vom Client um zu sehen, was da jeweils komplett gemacht wird.

Die Fehlermeldung besagt, dass der Socket geschlossen wurde. Also entweder schließt der Server die Verbindubg aktiv, oder es gibt einen Timeout (wobei ich gerade nicht ganz sicher bin, ob da die Meldung nicht etwas anders wäre).
 
Z

ZeusSeinGrossopa

Gast
Hier ist der Code vom Server:
Java:
try {
            ServerSocket server = new ServerSocket(6458);
            System.out.println("Der Server wurde gestartet!");
            while(true) {
                Socket client = server.accept();
                
                OutputStream out = client.getOutputStream();
                PrintWriter writer = new PrintWriter(out);
                
                
                InputStream in = client.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                
                    String s = reader.readLine();
                    if(s != null) {
                        System.out.println("Empfangen vom Client: " + s);
                        writer.write(reply + "\n");
                        writer.flush();       
                    }
            }
        } catch(SocketException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
K

kneitzel

Gast
Der Server liest erst eine Nachricht um dann etwas zurück zu schicken. Danach wird nichts weiter gemacht. (Also der socket wird dann geschlossen, wenn der GC dazu kommt...)

Schreibt Dein Client denn eine Nachricht an den Server? Wenn nichts geschrieben wird, dann würden Server und Client warten, dass etwas kommt.

Wenn der Client erst etwas schickt, dann kommt auch eine Nachricht zurück. Danach macht der Server nichts mehr und der Spcket wird früher oder später geschlossen. Der Cliebt wartet aber in der Schleife und wenn dann die Connection geschlossen wird, dann kommt die Exceotion...

Die zwei Möglichkeiten sehe ich derzeit.

Der Server sollte vernünftig mit den Sockets und Streas umgehen und am Ende der Nutzung alles schließen. Desweiteren solltest du überlegen auf async Verarbeitung zu setzen. Wenn ein Client sich verbindet aber nichts sendet, dann blockiert der Server. Weitere Clients können sich in der Zeit nicht verbinden ...

Was den Client angeht ist die Frage, wie das Protokoll aussehen soll. Derzeit macht die Schleife beim Empfang keinen Sinn, denn es ist aus Client Sicht genau eine Nachricht (Zeile) zu senden um dann genau eine Zeile zu lesen.
 
Z

ZeusSeinGrossopa

Gast
Schreibt Dein Client denn eine Nachricht an den Server? Wenn nichts geschrieben wird, dann würden Server und Client warten, dass etwas kommt.

Ich hab es halt vor das die ganze Zeit der Client nach neuen Daten von dem Server sucht. So hab ich mein System programmiert:
Ich will eine Information von dem Server bekommen. Dann wird ein String mit der Anfrage zu dem Server geschickt. Der Server schickt dann die Information zum Client.
 
K

kneitzel

Gast
Dann musst du das so schreiben. Wenn der Server die Information in einer Zeile zurück sendet, dann brauchst Du kein while(!socket.isClosed()) sondern nur ein einzelnes readLine.

Das wäre eine Idee.
 
Z

ZeusSeinGrossopa

Gast
Und wie soll ich es programmieren?

So funktioniert es auch nicht:
Java:
            String s = null;
            while((s = reader.readLine()) != null) {
                System.out.println("Nachricht vom Server: " + s);
            }
 
K

kneitzel

Gast
Keine Whileschleife, du musst
1. Eine Zeile an den Server senden
2. Eine Zeile vom Server lesen

Das wäre sozusagen jetzt Dein Protokoll, wenn man so will.
 
Z

ZeusSeinGrossopa

Gast
Ja, eine Zeile an den Server funktioniert aber die Zeile von dem Server abzulesen kann ich nicht. Deshalb weiß ich gerade auch nicht mehr weiter wie ich sonst Zeilen von dem Server lesen kann.
 
K

kneitzel

Gast
Was hast du denn jetzt im Client geändert? Zeig da mal den ganzen Code.

Und was ist reply im Server? Das ist ja, was du zurück sendest.
 
Z

ZeusSeinGrossopa

Gast
Ich hab das beim Server wegelassen:
Java:
String reply = manager.onRequest(s);
Dies ist dazu da das die information zurückgesendet wird, die der Client braucht.

Hier ist noch der Client Code:
Java:
Socket socket = new Socket(DATABSE_IP, DATABASE_PORT);
this.socket = socket;
thread = new SocketReader(packetManager, socket);
thread.start();

Socketreader Klasse:
Java:
public class SocketReader extends Thread {
    
    private PacketManager packetManager;
    private Socket socket;
    
    public SocketReader(PacketManager packetManager, Socket socket) {
        this.packetManager = packetManager;
        this.socket = socket;
    }
    
    @Override
    public void run() {
        try {
            InputStream in = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            
            String s = reader.readLine();
            if(s != null) {
                packetManager.incomingMessage(s); //Gibt die Daten weiter
                System.out.println("Nachricht vom Server: " + s);
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
        
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Server liest Daten nicht Netzwerkprogrammierung 6
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
F UDP Daten kommen nicht an Netzwerkprogrammierung 22
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
JavaDevOp Socket Status von UDP-Port prüfen (PortUnreachableException funktioniert nicht?) Netzwerkprogrammierung 32
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
B Multicast-Nachrichten-Empfang funktioniert nicht Netzwerkprogrammierung 5
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
S BufferedStream funktioniert nicht immer Netzwerkprogrammierung 7
T OutputStream kommt nicht an Netzwerkprogrammierung 18
G UDP Packet empfangen funktioniert nicht. Netzwerkprogrammierung 16
L30nS RMI RMI-Server kann Dialog nicht volkommen anzeigen Netzwerkprogrammierung 2
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
S .jar läuft local, aber nicht remote (SSH/Terminal) Netzwerkprogrammierung 10
J SSL haut nicht hin Netzwerkprogrammierung 3
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
J Wechsel auf Jdk13 , sfpt funktionier nicht mehr Netzwerkprogrammierung 2
Dann07 Proxy funktioniert nicht so wie gewünscht! Netzwerkprogrammierung 18
B RESTful API weiß nicht weiter Netzwerkprogrammierung 2
L Kann VM nicht ueber Host Name finden Netzwerkprogrammierung 0
V Ich finde den Fehler nicht... Netzwerkprogrammierung 2
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
S Socket Webserver mit SSLSocket geht nicht Netzwerkprogrammierung 1
P RMI stub wird nicht gefunden Netzwerkprogrammierung 8
N Test Servlet funktioniert nicht Netzwerkprogrammierung 11
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
D FTP ListNames() funktinoniert nicht richtig Netzwerkprogrammierung 2
Thallius JDBC getConnection kommt nicht zurück Netzwerkprogrammierung 1
KingSquizzi3 Website parsen mit Hilfe von jsoup funktioniert nicht Netzwerkprogrammierung 3
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F Reader/ Writer werden nicht geschlossen Netzwerkprogrammierung 2
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
R Socket bei server.accept(); gehts nicht weiter Netzwerkprogrammierung 2
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
L IText mit Servlets, funktioniert nicht Netzwerkprogrammierung 0
E Gruppenchat: Über HTTPS oder nicht? Netzwerkprogrammierung 5
P nanoHttp upload.html page lädt nicht Netzwerkprogrammierung 4
M Byte Array kommt nicht an Netzwerkprogrammierung 0
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
C Servlet erstellen klappt nicht Netzwerkprogrammierung 3
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
B Methoden und Konstruktoren von Java.net package werden nicht geladen Netzwerkprogrammierung 2
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
L Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert Netzwerkprogrammierung 6
C Portscanner funktioniert nicht! Netzwerkprogrammierung 8
M JSP wird im gesamten Projekt nicht neugeladen Netzwerkprogrammierung 3
B HTTP Webseite unter IP-Addresse nicht aufrufbar - unter Domain schon Netzwerkprogrammierung 9
K Chatprogramm - Server funktioniert nicht Netzwerkprogrammierung 5
A Socket ASCii Zeichen werden nicht per udp übermittelt. please help . Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
H HTTP Header Response kann nicht ausgelesen werden Netzwerkprogrammierung 4
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
G FTP FTP-Client funktioniert nicht bei Modem-Verbindungen Netzwerkprogrammierung 8
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
F Kann Klasse nicht zu Servlet casten Netzwerkprogrammierung 5
T Server und Client verbinden nicht Netzwerkprogrammierung 6
M HTTP File Upload mit Prozessbar Funktioniert nicht. Netzwerkprogrammierung 8
K Socket byte Schleife beendet nicht Netzwerkprogrammierung 9
J FTP FTP funktioniert nicht. Netzwerkprogrammierung 5
M Socket Exception tritt auf - weiß nicht weiter Netzwerkprogrammierung 3
L Socket Client empfängt nicht Netzwerkprogrammierung 6
S anderer Rechner wird nicht gefunden Netzwerkprogrammierung 20
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
M Socket InputStream liest nicht vollständig Netzwerkprogrammierung 7
S soap kann nicht zu 127.0.0.1:8090 unter Windows verbinden Netzwerkprogrammierung 2
F RMI einfacher Chat - Callbacks(?) funktionieren nicht Netzwerkprogrammierung 7
X Änderung des Objekts wird nicht serialisiert Netzwerkprogrammierung 9
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
R Client funktioniert nicht Netzwerkprogrammierung 2
C HTTP Content-Length nicht übermittelt!? Netzwerkprogrammierung 7
J Socket Chatserver aus dem Internet nicht erreichbar Netzwerkprogrammierung 19
S UDP Broadcast - Pakete kommen nicht immer an Netzwerkprogrammierung 15
D RMI URL nicht gefunden Netzwerkprogrammierung 2
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
M while-Schleife funktioniert nicht bei Nachrichtempfang von Server Netzwerkprogrammierung 3
P Socket IRC Client nicht kompatibel mit Server Netzwerkprogrammierung 30
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
K RMI Angemeldetes Objekt nicht aktuell? Netzwerkprogrammierung 9
2 Socket ObjectOutputstream kehrt nicht zurück Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben