Objekte über das Netzwerk

innocent

Mitglied
Hey!

Sitze an einer Programmieraufgabe für die Uni. Es geht um ein Kartenspiel. Um Fehlern direkt aus dem Weg zu gehen wollte ich direkt ein Objekt übertragen, welches die Karten enthält. Das funktionierte in meiner ersten Variante auch, jedoch sagten meine Gruppenleiter, dass es ein eher bescheidener Code ist (ich habe jedem Clienten einen Port zugeordnet).

Jetzt habe ich es neu geschrieben, es funktioniert nur leider nicht mehr. Vielleicht könnt ihr mir einen Tipp geben?

Ausschnitt Client:
Java:
socket = new Socket(Config.IP, Config.INITIAL_PORT);
oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject((SpielerDaten)this);
oos.flush();
oos.close();

Ausschnitt Server:
Java:
ois = new ObjectInputStream(client.getInputStream());
CL_Object clobject = null;
clobject = (CL_Object)ois.readObject();

An dieser Stelle gibt's immer einen Fehler.
Der Grund liegt wohl einfach darin, das ois.readObject() nicht darauf wartet, dass wirklich ein Objekt vorliegt. In meiner ersten Variante habe ich für jede Übertragung eine neue Verbindung aufgebaut, so dass ich immer das blockierende socket.accept() nutzen konnte.


Jemand eine Idee, wie ich den Code doch noch auf die Sprünge helfen kann?





Edit: Habe selbst gerade eine Idee gehabt: Wenn ich einen das serialisierte Objekt per readLine() empfange, habe ich eine blockierende Methode. Ich muesste also nur an die Serialisierung ein New-Line anhaengen und dann wieder entfernen? Ist das brauchbar?
 
Zuletzt bearbeitet:

homer65

Top Contributor
Client Code:
Code:
package client;
import java.net.*;
import java.io.*;
public class ServerRequest
{
	private static Socket con = null;
	private static OutputStream ou = null;
	private static ObjectOutputStream oo = null;
	private static InputStream in = null;
	private static ObjectInputStream oi = null;
	public static Object get(Object send)
	{
		Object received = null;
		try
		{
			con = new Socket(Parameter.host,Parameter.port);
			ou = con.getOutputStream();
			oo = new ObjectOutputStream(ou);
			oo.writeObject(send);
			oo.flush();
			in = con.getInputStream();
			oi = new ObjectInputStream(in);
			received = oi.readObject();
		}
		catch (Exception e)
		{
			Protokol.write("ServerRequest:Exception:" + e.toString());
			System.exit(12);
		}
		return received;
	}
}
Server Code:
Code:
package server;
import java.net.*;
import java.io.*;
public class MainThread extends Thread
{
	private int port = 0;
	ServerSocket sock = null;
	public MainThread(int port)
	{
		this.port = port;
	}
	public void run()
	{
		Protokol.write("MainThread:run:gestartet");
		try
		{
				sock = new ServerSocket(port);
				while (Global.runFlag)
				{
					try
					{
						Socket con = sock.accept();
						ArbeitsThread D = new ArbeitsThread(con);
						D.setDaemon(true);
						D.start();
					}
					catch (InterruptedIOException ie)
					{
						//Mache nichts
					}
				}
				sock.close();
		}
		catch (Exception e)
		{
			Protokol.write("MainThread:run:Exception:");
			Protokol.write(e.toString());
		}
		Global.runFlag = false;
		Protokol.write("MainThread:run:beendet");
	}
}
Code:
package server;
import java.io.*;
import java.net.*;
public class ArbeitsThread extends Thread
{
	private static int number = 0;
	public int myNumber = 0;
	public Socket con = null;
	public ArbeitsThread(Socket con)
	{
		this.con = con;
		InetAddress ia = con.getInetAddress();
		String client = ia.getHostAddress();
		myNumber = getNumber();
		Protokol.write("ArbeitsThread(" + myNumber + "): Created from " + client);
	}
	public void run()
	{
		Protokol.write("ArbeitsThread(" + myNumber + "):run:gestartet");
		InputStream in = null;
		OutputStream out = null;
		ObjectInputStream oi = null;
		ObjectOutputStream oo = null;
		try
		{
			in = con.getInputStream();
			oi = new ObjectInputStream(in);
			Object obj = oi.readObject();
			Verarbeitung V = new Verarbeitung(obj,this);
			Object obk = V.start();
			out = con.getOutputStream();
			oo = new ObjectOutputStream(out);
			oo.writeObject(obk);
			oo.flush();
		}
		catch (Exception e)
		{
			Protokol.write("ArbeitsThread(" + myNumber + "):Exception:" + e.toString());
		}
		Protokol.write("ArbeitsThread(" + myNumber + "):run:beendet");
	}
	public synchronized int getNumber()
	{
		number++;
		return number;
	}
}

Der Client schickt ein Object zum Server und erhält als Antwort ein anderes Object zurück.
 

innocent

Mitglied
Hey!

Die Fehlermeldung:
java.io.EOFException
at java.io_ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io_ObjectInputStream.readObject(ObjectInputStream.java:351)
at test_pascal04.SV_Client.run(SV_Server.java:96)
SET-Server: Fehler beim Uebertragen des Objekts
Exception in thread "Thread-1" java.lang.NullPointerException
at test_pascal04.SV_Client.run(SV_Server.java:104)

Wie ich darauf komme? Ich habe nach einem Teil der Fehlermeldung das Internet durchforstet. Nachdem ich dann etwas gelesen habe, habe ich expliziet nach dem Funktionsaufruf gesucht und in den Java Doc gestoebert.
Als mir dann klar wurde, dass der Fehler bei deserialisieren des Objektes liegen muss habe ich den Quellcode dahingehend umgebaut, dass der Client nur eine Verbindung herstellt, ohne den Versuch ein Objekt zu senden. Selbe Fehlermeldung.

Mein Ergebniss: Es ist kein blockierendes Wort und die Fehlermeldung besagt, dass auf dem Stream zu dem Zeitpunkt kein Objekt vorliegt.



Habe jetzt eine neue Variante mit readLine() geschrieben, ich muss dann nur leider das Objekt per Hand serialisieren. Funktioniert, ist aber leider sehr unkomfortabel, vor allem wenn ich an spaetere Aenderungen denke.


Naechste Idee:
Erst ein readLine() mit einem Codewort, danach dann die Abfrage nach dem Objekt. Duerfte funktionieren, oder? Ist das sinnvoll, oder soll ich lieber komplett auf readLine() setzen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
P Objekte über DatagramSocket versenden Netzwerkprogrammierung 12
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
T JSON-Objekte richtig parsen Netzwerkprogrammierung 8
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
C List Deserialisierung entfernt Objekte Netzwerkprogrammierung 2
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
S Socket Über UDP Objekte verschicken Netzwerkprogrammierung 9
B Eigene Objekte per RMI übergeben Netzwerkprogrammierung 2
S Kapselung der Netz-Objekte Netzwerkprogrammierung 3
B verschiedene Serialisierte Objekte identifizieren? Netzwerkprogrammierung 5
T Objekte im NIO unblocking mode versenden Netzwerkprogrammierung 11
C Socket ObjectInputStream liest nur Objekte der jeweiligen Programminstanz Netzwerkprogrammierung 5
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
M Messenger - String oder Objekte Netzwerkprogrammierung 4
S Netzwerk und Objekte Netzwerkprogrammierung 5
S RMI 1.) Entfernte Objekte "Zwischenspeichern" 2.) Threadsicherheit Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
A Konflikt: Blocking und Non-Blocking bei Objekte versenden Netzwerkprogrammierung 4
N RMI und Datenbank Objekte Netzwerkprogrammierung 3
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
A Objekte in übergebenen Objekten mit WebServices? Netzwerkprogrammierung 6
A RMI wie kann ich objekte übergeben? Netzwerkprogrammierung 5
P Serialialiserte Objekte übers Netzwerk verschicken Netzwerkprogrammierung 9
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben