socket-problem

Faulk

Mitglied
hi,
ich versuche seit einigen stunden mich mit sockets vertraut zu machen aber irgendwie komme ich nicht weiter...,
das endprodukt soll dann eine art chat-room sein..(ich weis gibts im FAQ, hat mir aber bei meinem prob nicht geholfen)

so erstmal war der plan: mehrere clients bauen verbindung zum server und der antwortet immer dem client der etwas gesendet hat das gleiche zurück (quasi ein echo-server mit multithreading...)

leider sagt mit der client nach der ersten nachricht(also bei der zweiten) immer socked closed...,
dabei habe ich meines wissens nach den socket gar nicht geschlossen...

ich bin mir sicher das das ein *an den kopfgreif*-problem für die meisten ist ^^trotzdem,
wäre super wenn ihr mir sagen könntet was da nicht passt, ich denke es is irgendwas grundlegendes...

hier mal code von server und client:

server:
Java:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.lang.Runnable;
import java.lang.Thread;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private ServerSocket server;
    private int port = 30000;

    public Server() {
        try {
            server = new ServerSocket(port);
        } catch (IOException e) {
           System.out.println(e.toString());
        }
    }

    public static void main(String[] args) {
        Server example = new Server();
        example.handleConnection();
    }

    public void handleConnection() {
        System.out.println("Waiting for client message...");

       
        while (true) {
            try {
                Socket socket = server.accept();
                new ConnectionHandler(socket);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

class ConnectionHandler implements Runnable {
    private Socket socket;

    public ConnectionHandler(Socket socket) {
        this.socket = socket;

        Thread t = new Thread(this);
        t.start();
    }

    public void run() {
        try
        {
           
             
            //
            // Read a message sent by client application
            //
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
           
            //
            // Send a response information to the client application
            //
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //oos.writeObject(message);

            ois.close();
            oos.close();
            
            socket.close();

            System.out.println("Waiting for client message...");
            
        }
            
            catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

CLient:
Java:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client{
private static int port = 30000;
private static ObjectOutputStream oos;
    public static void main(String[] args) {
        try {
			Scanner s = new Scanner(System.in);
			System.out.println("Welcome!");
			System.out.print("Enter Port:");
			//port = s.nextInt();
			System.out.println();
            InetAddress host = InetAddress.getLocalHost();
            Socket socket = new Socket(host.getHostName(), port);

            new ServerListener(socket);
           
            while(true)
            {
            System.out.print("Message:");
            String m = s.next() +"";
            oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(m);
            System.out.println();
            oos.close();
            }
            
            }
        catch (UnknownHostException e) { System.out.println("Unkown Host!");}
        catch (IOException e) {System.out.println("IOException:"+e.toString());}

        }


}


class ServerListener implements Runnable {
    private Socket socket;

    public ServerListener(Socket socket) {
        this.socket = socket;

        Thread t = new Thread(this);
        t.start();
    }

    public void run() {

            //
            // Read a message sent by client application
            //
            System.out.println("Listener is starting...");
            while(true)
            {

            try
        {
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
			ois.close();
        }

            catch (IOException e) {  }
            catch (ClassNotFoundException e) {}
        }
    }
}

btw:
Java:
 //oos.writeObject(message);
--> das is auskommentiert weil ich dann immer einen broken pipe- error bekomme...

greetings faulk
 

Faulk

Mitglied
danke für die antwort...
leider ändert das nichts am problem, sprich wenn ich die zeile auskommentiere bleibt das ergebnis das selbe....

ps:
ich hab mal nach dem

ois.close();
oos.close();

ein socket.isClosed() aufruf gemacht und der lieferte mir true... is das normal ?

danke
greetings faulk
 

Volvagia

Top Contributor
Die Standartstreams der API schließen auch den darunter liegenden Stream. Also den Stream des Sockets. Versuch einfach den die Objektstreams vor der Schleife zu öffnen und dann darin ganz normal ohne close zu benutzen.
 

bERt0r

Top Contributor
Java:
class ConnectionHandler implements Runnable {
    private Socket socket;
 
    public ConnectionHandler(Socket socket) {
        this.socket = socket;
 
        Thread t = new Thread(this);
        t.start();
    }
 
    public void run() {

            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            ois.close();
            oos.close();
            
            socket.close();
}
Der Thread auf Serverseite, der die Clientconnection bearbeitet schreibt eine Message raus und kappt dann die Verbindung. Da muss natürlich eine Schleife rein.
 
Zuletzt bearbeitet:

Faulk

Mitglied
hi,
danke für die vielen antworten
ich hab das jetzt folgendermaßen umgestellt aber es klappt nicht ich bekomme jetzt eine java.io.EOFException
at java.io_ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553) .
(!) Aber erst nach dem ersten durchlauf beim zweiten durchgang der schleife

code:(schleife implementiert und *.close() entschärft)
Java:
 public void run() {
        try
        {
           
             //System.out.print("Socket is closed at beginning of while:"+socket.isClosed());
            //
            // Read a message sent by client application
            //
            ois = new ObjectInputStream(socket.getInputStream());   // die neuen streams sind oben als  private deklariert
            oos = new ObjectOutputStream(socket.getOutputStream()); // --||--
       while(true)  // --> die neue schleife
           {
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            
            //
            // Send a response information to the client application
            //
            //ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //oos.writeObject(message); // Bringt eine Broken Pipe Exception wenn nicht auskommentiert
            if(message.equals("exit"))
                {
            ois.close();
            oos.close();
                }
            oos.flush(); // Brauch ich das?
            
            System.out.println("Waiting for client message...");
            }
            
            
            //socket.close();

          
         
        }
            
            catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

danke im vorraus!
greetings faulk
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Ein Flush "spült" quasi den ganzen Stream durch und schreibt in dahin wo er hinsoll. Normalerweise brauchst du flush gar nicht. Wenn du flush auf einen geschlossenen Stream anwendest bekommst du eine Exception, das selbe bei read oder write.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Socket Problem Java Basics - Anfänger-Themen 3
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
N Socket Problem? Java Basics - Anfänger-Themen 9
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
G Socket Verbindung aufbauen Java Basics - Anfänger-Themen 11
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Asynchrone Socket-Abfragen Java Basics - Anfänger-Themen 5
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
J Socket schließen - Ist eine SocketException unumgänglich? Java Basics - Anfänger-Themen 4
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
N Socket-Programmierung Java Basics - Anfänger-Themen 4
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
B Socket OutputStream Java Basics - Anfänger-Themen 17
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
B Socket, args Java Basics - Anfänger-Themen 22
L Socket in JTextArea Java Basics - Anfänger-Themen 9
T Input/Output Zwei InputStreams von einem Socket Java Basics - Anfänger-Themen 2
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
M Versand von Nachrichten via Socket (Delay) Java Basics - Anfänger-Themen 21
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
E Socket (Client) dauerhaft aktiv? Java Basics - Anfänger-Themen 9
D Java - Socket - Datenübertragung Java Basics - Anfänger-Themen 18
E Input/Output einfachen Socket für XML-Anfragen bauen Java Basics - Anfänger-Themen 13
R Cannot find a free socket for the debugger Java Basics - Anfänger-Themen 6
F Socket Kommunikation Java Basics - Anfänger-Themen 4
M "Connection reset" gbxRemote Socket Java Basics - Anfänger-Themen 9
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
L FTP per Socket Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
M Socket Server Java Basics - Anfänger-Themen 9
G Socket erstellen dauert sehr lange. Java Basics - Anfänger-Themen 4
H Java Socket Java Basics - Anfänger-Themen 14
A XML Daten über Socket Java Basics - Anfänger-Themen 3
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
C Socket Programmierung Java Java Basics - Anfänger-Themen 4
F Socket Instanz auf Klasse welche von Socket erbt zuweisen Java Basics - Anfänger-Themen 3
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
J Daten von einem (char*)Socket einlesen. Java Basics - Anfänger-Themen 3
S Java Socket Java Basics - Anfänger-Themen 3
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
M Ändern einer Socket-Eigenscheft aus einem modalen Dialog? Java Basics - Anfänger-Themen 6
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben