Java-Forum.org  
Zurück   Java-Forum.org > Java - Programmierung > Netzwerkeprogrammierung

Netzwerkeprogrammierung: Socket close

Fragen zu Client-/Server-Programmierung sowie zu verteilten Anwendungen (RMI, CORBA etc.)

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 31.10.2007, 16:37   #1
 
Socket close - Standard Socket close

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:
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:
	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????
 
Alt 31.10.2007, 16:55   #2
 
Socket close - Standard AW: Socket close

wegen out.close();








(welches auch den (die) unterliegenden Stream(s) schließt)
 
Alt 31.10.2007, 17:03   #3
 
Socket close - Standard AW: Socket close

Code:
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
 
Alt 31.10.2007, 17:06   #4
 
Socket close - Standard AW: Socket close

erzeugst du immer noch 2x
out = new ObjectOutputStream(socket.getOutputStream());
?
tue das nicht,
 
Alt 31.10.2007, 17:55   #5
 
Socket close - Standard AW: Socket close

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 ???
 
Alt 31.10.2007, 18:05   #6
 
Socket close - Standard AW: Socket close

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
 
Alt 31.10.2007, 19:45   #7
 
Socket close - Standard AW: Socket close

also das passiert in meiner GUI

Code:
		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:
                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:
	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();
		}
	} 
}
 
Alt 01.11.2007, 15:37   #8
 
Socket close - Standard AW: Socket close

noch mehr code???
 
Alt 01.11.2007, 15:39   #9
 
Socket close - Standard AW: Socket close

mein Vorschlag ist noch immer, nicht mehrere
new ObjectOutputStream(socket.getOutputStream());
zu erzeugen,
 
Alt 01.11.2007, 16:37   #10
Dante
 
Socket close - Standard AW: Socket close

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.
 
Thema geschlossen    

Zurück   Java-Forum.org > Java - Programmierung > Netzwerkeprogrammierung

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen: Socket close
Socket schließen mit .close()
Socket schließen mit .close(): Hallo, habe mich heute erstmals drangesetzt...
close() Socket Verbindung nötig ?
close() Socket Verbindung nötig ?: Hallo, ich habe eine kleine Socket...
socket.close() Problem ----- java.net.BindException
socket.close() Problem ----- java.net.BindException: Hallo! Ich habe in meiner Client-Applikation...
ObjectOutputStream + Socket close
ObjectOutputStream + Socket close: Hallo Zusammen, ich habe eine Frage zum Thema...




Sie betrachten gerade Socket close