Socket close

Status des Themas:
Es sind keine weiteren Antworten möglich.

Diskutiere Socket close im Netzwerkprogrammierung Forum; Hallo zusammen, Ich will etwas an meinen Server schicken, wenn ein Button gedrückt wurde. Klappt wunderbar doch beim 2ten mal bekomm ich eine...

  1. Gast2
    Gast2 Guest
    Hallo zusammen,

    Ich will etwas an meinen Server schicken, wenn ein Button gedrückt wurde. Klappt wunderbar doch beim 2ten mal bekomm ich eine Fehlermeldung.
    Code (Text):

    java.net.SocketException: Socket is closed
        at java.net.Socket.getOutputStream(Unknown Source)
        at verleih.service.TestServer.senden(TestServer.java:99)
        at verleih.Verwaltung.AnlegenCD.actionPerformed(AnlegenCD.java:102)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
     

    Code (Text):

        public static void senden(String nachricht,MEDCd cd) throws Exception
        {
            out =  new ObjectOutputStream(socket.getOutputStream());
            out.writeObject(nachricht);
            out.writeObject(cd);
            out.flush();
            closeStreams();
           
        }

        public static void closeStreams()
        {
           
                try {
                    if(sIn!=null)   sIn.close();
                    if(out!=null)   out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
           
        }
     

    warum ist das Socket geschlossen????
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. SlaterB
    SlaterB Guest
    wegen out.close();








    (welches auch den (die) unterliegenden Stream(s) schließt)
     
  4. Gast2
    Gast2 Guest
    Code (Text):

    java.net.SocketException: Software caused connection abort: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(Unknown Source)
        at java.net.SocketOutputStream.write(Unknown Source)
        at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
        at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
        at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)
        at java.io.ObjectOutputStream.writeClassDesc(Unknown Source)
        at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
        at java.io.ObjectOutputStream.writeObject0(Unknown Source)
        at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
        at java.io.ObjectOutputStream.writeObject(Unknown Source)
        at verleih.service.MEDServer.senden(MEDServer.java:101)
        at verleih.Verwaltung.MEDAnlegenCD.actionPerformed(MEDAnlegenCD.java:102)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
     
    ohne das close kommt beim 2ten mal das hier
     
  5. SlaterB
    SlaterB Guest
    erzeugst du immer noch 2x
    out = new ObjectOutputStream(socket.getOutputStream());
    ?
    tue das nicht,
     
  6. Gast2
    Gast2 Guest
    he und warum??? ich sende einmal und danach sende ich nochmal halt ein anderes Objekt sind das dann keine unterschiedlichen streams????ß

    also das heißt ich muss beim connecten einmal den output -und inputstream anlegen ???
     
  7. SlaterB
    SlaterB Guest
    so genau kann ich das nicht sagen, auch nicht testen,
    eher die Suche nach Möglichkeiten,

    allgemein ist zu empfehlen, mehr Code zu posten und funktionierende Beispiele aus Lehrbüchern anzuschauen,
    mit GUI sind die allerdings selten, stimmt ;)
     
  8. Gast2
    Gast2 Guest
    also das passiert in meiner GUI

    Code (Text):

            public void actionPerformed(ActionEvent ae)
            {
                if(ae.getSource()==btZuruck)
                {
                    clearAngaben();
                }
               
                if(ae.getSource()==btSpeichern)
                {
                    cd=new MEDCd(Integer.parseInt(txtAnzahl.getText()),Float.parseFloat(txtPreis.getText()),txtBeschreibung.getText());
                    try {
                        MEDServer.senden("Nachricht1",cd);
                       
                       
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            }

     
    Client seite
    Code (Text):

                    public static void serverVerbindung()
        {
            try {
                //setServerVerbindungDaten();
                adresse=InetAddress.getByName(ip);
                socket= new Socket(adresse,port);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           
        }

        public static void senden(String nachricht,MEDCd cd) throws Exception
        {
            out =  new ObjectOutputStream(socket.getOutputStream());
            out.writeObject(nachricht);
            out.writeObject(cd);
            out.flush();
            //closeStreams();
           
        }
     
    serversetitig

    Code (Text):

        private static void verbindungClient()
        {  

            MEDServer.debug("* ServerSocket initialsieren");
            try {
                serverSocket=new ServerSocket(clientPort);
            } catch (IOException e) {
                MEDServer.debug("* ServerSocket fehgeschlagen initialsieren");
                MEDServer.debug(e.getMessage());
                e.printStackTrace();
                return;
            }
            MEDServer.debug("* Server läuft*****:" +serverSocket);
            MEDServer.debug("* PORT:" +clientPort);
       
        }

        public static void waitForClient()
        {  

            MEDServer.debug("* Warten bis eine Anfrage vom Client kommt");
            try
            {
                while(true)
                {
                    socket=serverSocket.accept();
                    MEDServer.debug("verbindung angenommen "+socket);
                    new ServerThread(socket).start();
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }


        }

    public class ServerThread extends Thread
    {

        private Socket socket;
        private ObjectOutputStream out;
        private ObjectInputStream sIn;
       
        public ServerThread(Socket s)
        {
            socket=s;
        }
       
        public void run()
        {
           
            try
            {
                sIn= new ObjectInputStream (socket.getInputStream());
                out= new ObjectOutputStream(socket.getOutputStream());
                String s=sIn.readObject().toString();
                MEDServer.debug("Anfage " +s);
               
                if(s.equals("Nachricht1"))
                {
                    MEDCd cd =(MEDCd) sIn.readObject();
                    MEDServer.debug("Object:" );
                    MEDServer.debug("Nr: "+ cd.getNr());
                    MEDServer.debug("Beschreibung: "+cd.getBeschreibung() );
                    MEDServer.debug("Preis: "+cd.getPreis() );
                    MEDServer.debug("Anzahl:"+ cd.getAnzahl());
                }      
                out.writeObject("OK");
                out.flush();
                out.close();
                sIn.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }

     
     
  9. Gast2
    Gast2 Guest
    noch mehr code???
     
  10. SlaterB
    SlaterB Guest
    mein Vorschlag ist noch immer, nicht mehrere
    new ObjectOutputStream(socket.getOutputStream());
    zu erzeugen,
     
  11. Dante
    Dante Neues Mitglied
    wenn du in einer methode eine (lokale) variable erzeugst, wird diese am ende der funktion gelöscht. Dabei wird der stream (der in dieser variable instanziert war) geschlossen und das schliesst rekursiv alles, was an diesem stream hing, also auch den socket

    daher solltest du eine art 'client' oder 'server' objekt bauen, das würde dann den socket und die streams kapseln und du kannst da drauf ne send-methode implementieren. dieses objekt kannst du dann an alle weitergeben die senden oder empfangen sollen.
     
Die Seite wird geladen...

Socket close - Ähnliche Themen

Socket sendet erst nach socket.close()
Socket sendet erst nach socket.close() im Forum Netzwerkprogrammierung
Threads closen und Sockets schliessen
Threads closen und Sockets schliessen im Forum Netzwerkprogrammierung
socket.close aber verbindung besteht noch
socket.close aber verbindung besteht noch im Forum Java Basics - Anfänger-Themen
Socket is closed
Socket is closed im Forum Netzwerkprogrammierung
Socket schließen mit .close()
Socket schließen mit .close() im Forum Netzwerkprogrammierung
Status des Themas:
Es sind keine weiteren Antworten möglich.
Thema: Socket close