Object an Server senden, Server antwortet mit objekt?

babuschka

Top Contributor
Hi,

versuch hier ne Verbindung aus Client und Server herzustellen. Soweit auch alles gut. Allerdings ein Problem gibts mitm Senden:

Die Client-Methode zum Senden:

Java:
	public static Object send(Object object){
		
		//Verbindung aufnehmen
		Socket socket = startConnection();
		
		Object obj = null;
				
		//Senden
		OutputStream out;
		ObjectOutputStream oos = null;
		try {
			out = socket.getOutputStream();
			oos = new ObjectOutputStream(out);
			
			oos.writeObject(object);	
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//Antwort empfangen
		InputStream in;
		ObjectInputStream ins = null;
		try {
			in = socket.getInputStream();
			ins = new ObjectInputStream(in);
			
			obj = ins.readObject();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("[Client] Object gesendet");
		
		//Verbindungen beenden
		try {
			oos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		closeConnection(socket);
		
		return obj;
	}

Die Methode vom Server:

Java:
	public void run() {
		
		try {
			InputStream in = connectionToClient.getInputStream();
			
			System.out.println("[SERVER] Lese input Stream...");
		
			// Erstellen des ObjectInputStreams
			ObjectInputStream objIn = new ObjectInputStream(in);
			OutputStream out = null;
			ObjectOutputStream objOut = null;
			
			try {
				// Empfangen des vom Client gesendetn Objekts
				Object obj = objIn.readObject();
				
				System.out.println("[SERVER] Object erhalten");
				
				if (obj instanceof Ausgabe) {
					....					
					
				}else if(obj instanceof String){
					String abruf = (String) obj;
					
					System.out.println("[SERVER] neue String-Anfrage: " + abruf);
					
					if(abruf.equals("sendAlleZeitschriftenKomplett")){
						
						System.out.println("[SERVER] Alle Zeitschriften inkl. Ausgaben werden verschickt");
						//Antwort zurücksenden
						
						out = connectionToClient.getOutputStream();
						objOut = new ObjectOutputStream(out);
						Object test = "Huhu";
						objOut.writeObject(test);
																		
					}
				}
				
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			
			objIn.close();
			//objOut.close();
			connectionToClient.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

Problem ist, dass zwar die Anfrage an den Server raus, also die Anfrage kommt an, der geht in die IF-Abfrage rein.
Aber das Zurücksenden eines Objektes läuft nicht. Also beim Senden vom Server direkt gibts keinen Fehler.
Aber beim Empfangen der Antwort im Client erhalte ich dann folgende Exeception:

Zeile 76 ist die hier: ins = new ObjectInputStream(in);
java.io.EOFException
at java.io_ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io_ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io_ObjectInputStream.readStreamHeader(Unknown Source)
at java.io_ObjectInputStream.<init>(Unknown Source)
at de.steuerung.MagazinClient.send(MagazinClient.java:76)
at de.gui.MagazinManagerWindow.createInhalt(MagazinManagerWindow.java:174)
at de.gui.MagazinManagerWindow.loadContent(MagazinManagerWindow.java:139)
at de.gui.listener.JMenuBarListener.actionPerformed(JMenuBarListener.java:28)
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.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.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)

Hoffe ihr habt ne Idee...danke
 

homer65

Top Contributor
Ohne das im Detail zu durchschauen.
Nach dem:
Code:
 objOut.writeObject(test);
ist noch ein:
Code:
 objOut.flush();
empfehlenswert.
 

homer65

Top Contributor
Hmh, schade, wäre so schön einfach gewesen.
Aber auf Client Seite fehlt nach:
Code:
oos.writeObject(object);
auch der flush.
Übrigens tut
Code:
ins = new ObjectInputStream(in);
Bereits Daten vom server lesen, die er wohl noch nicht bereit gestellt werden.
 

babuschka

Top Contributor
Achso ok...hab die Reihenfolge dann mal geändert:

Java:
public static Object send(Object object){
		
		//Verbindung aufnehmen
		Socket socket = startConnection();
		
		Object obj = null;
		
		//Senden
		OutputStream out;
		InputStream in;
		ObjectOutputStream oos = null;
		ObjectInputStream ins = null;
		try {
			out = socket.getOutputStream();
			in = socket.getInputStream();
			
			oos = new ObjectOutputStream(out);
			oos.writeObject(object);
			oos.flush();
			
			//Antwort lesen
			ins = new ObjectInputStream(in);
			obj = ins.readObject();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
		System.out.println("[Client] Object gesendet");
		
		//Verbindungen beenden
		try {
			oos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		closeConnection(socket);
		
		return obj;
	}

Java:
	public void run() {
		
		try {
			InputStream in = connectionToClient.getInputStream();
			OutputStream out = connectionToClient.getOutputStream();
			
			System.out.println("[SERVER] Lese input Stream...");
		
			// Erstellen des ObjectInputStreams
			ObjectInputStream objIn = new ObjectInputStream(in);
			ObjectOutputStream objOut = null;
			
			try {
				// Empfangen des vom Client gesendetn Objekts
				Object obj = objIn.readObject();
				
				System.out.println("[SERVER] Object erhalten");
				
				if (obj instanceof Ausgabe) {
					...				
				}else if(obj instanceof String){
					String abruf = (String) obj;
					
					System.out.println("[SERVER] neue String-Anfrage: " + abruf);
					
					if(abruf.equals("sendAllZeitschriften")){
						....	
					}else if(abruf.equals("sendAlleZeitschriftenKomplett")){
						//Anfrage zum Verschicken aller aktuellen Zeitschriften inkl. Ausgaben, etc.
						System.out.println("[SERVER] Alle Zeitschriften inkl. Ausgaben werden verschickt");
						//Antwort zurücksenden
						objOut = new ObjectOutputStream(out);
						Object object = "Stringtest";
						objOut.writeObject(object);
						objOut.flush();
					}
				}
				
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			
			objIn.close();
			objOut.close();
			connectionToClient.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
S

SlaterB

Gast
2 ns nachdem der Server die Antwort sendet steht schon
> connectionToClient.close();

das ist sicherlich ungesund für eine vertrauensvolle Übertragung

edit:
wobei es lokal auch damit funktioniert, vielleicht ist dort die Übertragung schnell genug,
deine try/catch-Auswüchse solltest du überdenken, allein in der Hinsicht vielleicht schon hilfreich:

Java:
public class Test
{
    public static void main(String[] args)  throws Exception  {

        new Thread()  {
                public void run()  {
                    try    {
                        serverRun();
                    }catch (Exception e)   {
                        e.printStackTrace();
                    }
                }
            }.start();

        Thread.sleep(2000);
        send("test");
        Thread.sleep(4000);
        System.out.println("end");
    }

    public static void serverRun()   throws Exception {
        ServerSocket server = new ServerSocket(5678);
        Socket connectionToClient = server.accept();
        InputStream in = connectionToClient.getInputStream();

        System.out.println("[SERVER] Lese input Stream...");

        // Erstellen des ObjectInputStreams
        ObjectInputStream objIn = new ObjectInputStream(in);
        OutputStream out = null;
        ObjectOutputStream objOut = null;

        // Empfangen des vom Client gesendetn Objekts
        Object obj = objIn.readObject();

        System.out.println("[SERVER] Object erhalten: " + obj);


        // Antwort zurücksenden
        out = connectionToClient.getOutputStream();
        objOut = new ObjectOutputStream(out);
        Object test = "Huhu";
        objOut.writeObject(test);

        objIn.close();
        // objOut.close();
        connectionToClient.close();
    }

    public static Object send(Object object)   throws Exception  {

        // Verbindung aufnehmen
        Socket socket = new Socket("localhost", 5678);

        Object obj = null;

        // Senden
        OutputStream out;
        ObjectOutputStream oos = null;
        out = socket.getOutputStream();
        oos = new ObjectOutputStream(out);

        oos.writeObject(object);
        System.out.println("[Client] Object gesendet");

        // Antwort empfangen
        InputStream in;
        ObjectInputStream ins = null;
        in = socket.getInputStream();
        ins = new ObjectInputStream(in);

        obj = ins.readObject();
        System.out.println("Antwort beim Client: " + obj);

        // Verbindungen beenden
        oos.close();
        socket.close();

        return obj;
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C mehrdimensionales Object sortieren Java Basics - Anfänger-Themen 4
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
F Wie kann ein Object[] zu Integer[] umwandeln? Java Basics - Anfänger-Themen 6
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38

Ähnliche Java Themen

Neue Themen


Oben