# Socket problem



## socket (15. Jul 2006)

Hi,
der Socket schließt zu früh was kann ich da gegen machen.
Mein code:

```
package Fehler;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;


import java.io.ObjectOutputStream;

public class Test extends Thread implements ActionListener{
	JFrame f = new JFrame("Test");
	JTextField ipTF,clientportTF,serverPortTF,messageTF;
	SendData sendData=null;
	public Test(){
		f.setSize(100,50);
		f.setLayout(new GridLayout(2,2));
		ipTF = new JTextField("");
		f.add(ipTF);
		clientportTF = new JTextField();
		f.add(clientportTF);
		serverPortTF = new JTextField();
		serverPortTF.addActionListener(this);
		f.add(serverPortTF);
		messageTF = new JTextField();
		messageTF.addActionListener(this);
		f.add(messageTF);
		f.setVisible(true);
		sendData = new SendData(6889);
		sendData.start();
	}

	public static void main(String args[]){
		new Test();
	}

	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==serverPortTF){
			sendData.stop();
			sendData=new SendData(Integer.parseInt(serverPortTF.getText()));
			sendData.start();
		}else{
			Socket socket;
			try {
				socket = new Socket(ipTF.getText(),Integer.parseInt(clientportTF.getText()));
			ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
			oos.writeObject(messageTF.getText());
			oos.flush();
			oos.close();
			ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
			Object o=ois.readObject();
			System.out.println(o);
			ois.close();
			socket.close();
			} catch (NumberFormatException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (UnknownHostException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}
}
class SendData extends Thread{
	int port=6889;
	public SendData(int port){
		this.port=port;
	}

	public void run(){
		try {
			ServerSocket s = new ServerSocket(port);
			Socket socket=s.accept();
			ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
			Object o=ois.readObject();
			ois.close();
			System.out.println(o);
			ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
			oos.writeObject("Bekommene nachricht:"+o);
			oos.flush();
			oos.close();
			socket.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
```
Fehlermeldung vom Client

```
java.net.SocketException: Socket is closed
	at java.net.Socket.getInputStream(Socket.java:762)
	at Fehler.Test.actionPerformed(Test.java:69)
	at javax.swing.JTextField.fireActionPerformed(JTextField.java:487)
	at javax.swing.JTextField.postActionEvent(JTextField.java:668)
	at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:783)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1571)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2763)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2798)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2726)
	at java.awt.Component.processEvent(Component.java:5265)
	at java.awt.Container.processEvent(Container.java:1966)
	at java.awt.Component.dispatchEventImpl(Component.java:3955)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1810)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:672)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:920)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:798)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:636)
	at java.awt.Component.dispatchEventImpl(Component.java:3841)
	at java.awt.Container.dispatchEventImpl(Container.java:2024)
	at java.awt.Window.dispatchEventImpl(Window.java:1774)
	at java.awt.Component.dispatchEvent(Component.java:3803)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
```
Fehlermeldung vom Server

```
cool
java.net.SocketException: Socket is closed
	at java.net.Socket.getOutputStream(Socket.java:799)
	at Fehler.SendData.run(Test.java:104)
```
das cool ist der text den ich gesendet habe. Er kommt also beim server an nur das request vom server geht nicht. Was mache ich falsch?


----------



## Lim_Dul (15. Jul 2006)

```
ois.close();
```

Mach das mal weg. Wenn du Stream schließt, kann es gut sein, dass dann der ganze Socket geschlossen wird.


----------



## Guest (15. Jul 2006)

thx für die antwort hat funktioniert


----------

