Array oder Object über Sockets

Status
Nicht offen für weitere Antworten.
J

JavaNeuling123

Gast
Hallo,

ich möchte gerne das Array "pizzen" mittels Sockets von einem Client an den Server übertragen(ohne RMI)!
Der Server soll dann die Inhalte auslesen, bearbeiten und die Inhalte wieder zurück schicken können.

Hätte das ganze mit ObjectOutputStream realisiert, aber irgendwie gibts folgende Fehlermeldung:
Code:
java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)


Hier ein Ausschnitt des Codes:
Das Problem liegt in Zeile 16! Wie könnt ich ein Array sinnvoll über Sockets übertragen?

Code:
//Array Pizzen
Pizza []pizzen = {new Pizza(1, "Salami", 7),
				     new Pizza(2, "Schinken", 10)};

try
		{
			// Verbindung zum Server aufbauen
			Socket zumServer = new Socket(host, port);
			ObjectOutputStream oos = new ObjectOutputStream(zumServer.getOutputStream());			
			
			// Eingabestrom für Rückantwort aufbauen
			ObjectInputStream ois = new ObjectInputStream(zumServer.getInputStream()); 
			
		   // Daten an Server schreiben
			--> HIER LIEGT DAS PROBLEM:oos.writeObject(pizzen);
			                           oos.flush();

Wie könnte ich das ganze realisieren?

Vielen Dank!!
 

DocFaust

Mitglied
Hallo JavaNeuling123,

Ich habs grad ausprobiert, ein Array zu übertragen ist kein Problem. Die Klasse des Arrays sollte sich nur von Serializable ableiten.

Die Fehlermeldung sagt mir allerdings folgendes: Da läuft kein Server, der Dein Array entgegennimmt. Zumindest nicht auf dem Rechner und dem Port, auf den Du möchtest.
Hast Du Dein Serverprogramm schon gestartet? Ist da evtl. ne Firewall dazwischen?

Viel Erfolg
Doc
 
J

JavaNeuling123

Gast
Doch der Server ist gestartet.

Nochmal zur Ausganglage: Ich möchte das ein Client dem Sever eine Anzahl an Daten(in meinem Fall, verschiedene Pizzen, die durch ID, Bezeichnung und Preis gekennzeichnet sind) rüberschickt. Da es mehrere Pizzen sind, dachte ich, dass ein Array sinnnvoll wäre!

Der Server erhält die Daten, holt sich aus dem Array die jeweiligen Preise heraus, summiert diese und schickt sie wieder zurück! Soviel zur Theorie ;-)

Doch wie übertrag ich das Array sinnvoll, so dass ich es am Server weiter sauber bearbeiten kann und
wie lässt sich der Preis summieren?

Das ganze besteht aus drei Klassen(Server, Client, Pizza)

Hier mal der komplette Code:
Der Server
Code:
mport java.io.*;
import java.net.*;

public class Server 
{
	public Server(int port){
		try
		{
			// Serversocket aufbauen
			ServerSocket serv = new ServerSocket(port);
	
			while(true){
				try
				{
					// Wenn ein Client zum Server verbindet, 
					// ankommende Daten verarbeiten
					Socket zumClient = serv.accept();
					System.out.println("Socket gestartet");
					verarbeiten(zumClient);
				}
				catch(IOException ex)
				{
					ex.printStackTrace();
				}
			}
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	public void verarbeiten(Socket sock) throws IOException, ClassNotFoundException
	{
		// Verbindung zum Einlesen der Daten
		ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
        DataOutputStream oos= new DataOutputStream(sock.getOutputStream()); 
		
        //Empfangende Daten wieder als Object einlesen
        Pizza []pizzen = (Pizza[]) ois.readObject();
		
               
        //BEARBEITEN VON []PIZZEN
        //WIE KÖNNTE ICH HIER NUN DEN PREIS JEDES ELEMENTS AUSLESEN????
		
        //Dann das Ergebnis der Addition
        int summierterPreis = 0;
        
        //Ergebnis zurückschreiben
        oos.writeInt(summierterPreis);
		oos.flush();
		oos.close();
		ois.close();
		
		// Verbindung zum Client schließen
		sock.close();
	}

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

DER CLIENT
Code:
mport java.io.*;
import java.net.*;

public class Client 
{
	public Client(String host, int port)
	{
		Pizza []pizzen = {new Pizza(1, "Salami", 7),
					      new Pizza(2, "Schinken", 10)};
		
		try
		{
			// Verbindung zum Server aufbauen
			Socket zumServer = new Socket(host, port);
			ObjectOutputStream oos = new ObjectOutputStream(zumServer.getOutputStream());			
			
			// Eingabestrom für Rückantwort aufbauen
			DataInputStream ois = new DataInputStream(zumServer.getInputStream()); 
			
			// Daten an Server schreiben
			oos.writeObject(pizzen);
			oos.flush();
						
			// Rückantwort vom Server abwarten und einlesen.
			int ergebnis = ois.readInt();
			System.out.println(ergebnis);
				
			ois.close();
			oos.close();
			
			// Verbindung beenden
			zumServer.close();
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}

	public static void main(String[] args) 
	{
		new Client("localhost", 8006);
	}
}

DIE KLASSE PIZZA
Code:
import java.io.Serializable;

public class Pizza implements Serializable{

	private static final long serialVersionUID = 1L;
	public long Id;
	public String Bezeichnung;
	public long Preis;
	
	public long getId() {
		return Id;
	}

	public void setId(long id) {
		Id = id;
	}

	public String getBezeichnung() {
		return Bezeichnung;
	}

	public void setBezeichnung(String bezeichnung) {
		Bezeichnung = bezeichnung;
	}

	public long getPreis() {
		return Preis;
	}

	public void setPreis(long preis) {
		Preis = preis;
	}
	
	public Pizza(long id, String Bezeichnung, long Preis){
		this.Id = id;
		this.Bezeichnung = Bezeichnung;
		this.Preis = Preis;
	}		
}


Vielen Dank!!!!!!![/code]
 
S

SlaterB

Gast
fange erstmal ganz ganz ganz ganz einfach an,
und übertrage lediglich einen String 'test', klappt das?

falls du immer noch bei
> java.net.ConnectException: Connection refused: connect
bist, dann poste den StackTrace komplett, und prüfe genau die Zeilennummern

sowas tritt normalerweise direkt beim Aufbau der Verbindung auf, also bei
> Socket zumServer = new Socket(host, port);


teste das auch mit

Socket zumServer = new Socket(host, port);
System.out.println("Verbindung steht");

kommt die Ausgabe?
 
J

JavaNeuling123

Gast
Hallo,

vielen dank für Eure Hilfe!

Die Klassen, so wie ich sie oben gepostet hab, funktionieren fehlerfrei!Jedoch ist hier die Verarbeitung am Server noch nicht implementiert!


Ich weiß jetzt nur nicht, :
1. wie ich, wenn ich am Server das Objekt erhalte, dieses behandeln soll? Dieses Object sollte ja eigentlich nun aus einem Feld mit mehreren Pizzen, die jeweils mehrere Einträge(Id, Bezeichnung, Preis)bestehen.

2. Wie lese ich die Preise der einzelnen Pizzen aus und addiere diese?

Vielen Dank!!
 
S

SlaterB

Gast
> Die Klassen, so wie ich sie oben gepostet hab, funktionieren fehlerfrei!Jedoch ist hier die Verarbeitung am Server noch nicht implementiert!


genau, und an der Verbindung zum Server arbeite nun erstmal in einem anderen kleinen Testprogramm,
nicht alles durcheinandermischen solange die einzelnen Schritte nicht bekannt und getestet sind


> wenn ich am Server das Objekt erhalte, dieses behandeln soll?

das Objekt zu erhalten ist eine Sache, ob nun übe einen Socket oder einen ganz normalen Methodenaufruf ist egal,
wenn das Objekt erstmal da ist, dann ist die Art der Übertragung völlig irrelevant,
alle weiteren Fragen haben nichts mit mit Sockets zu tun, darüber musst du dir grundsätzlich klar werden,


ein Array kann man mit einer Schleife durchlaufen, jede Pizza kann man nach ihren Preis fragen,
wenn dir solch grundsätzliche Dinge nicht bekannt sind, dann siehts ja düster aus,

in jedem Fall empfiehlt sich, dass erstmal lokal zu testen, unabhängig von Client/ Server usw.
 
J

JavaNeuling123

Gast
Ich möchte ja nur wissen, ob der gewählte Weg so richtig ist:

Sprich:

Client
Mehrere Pizzas mit verschiedenen Attributen in Array speichern-->Dieses Array als Object zum Server übertragen!

Server
Server erhält das Object.
Frage: Muss ich das Object nun wieder in ein Array umwandeln?

Wenn ja, Array kann nun durchlaufen und bearbeitert werden!

Ist dies so richtig?

Danke!
 
S

SlaterB

Gast
dies ist so richtig, siehe erste inhaltliche Zeile der allerersten Antwort von DocFaust ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
x46 Byte-Array per for-Schleife schicken Netzwerkprogrammierung 1
W Socket Byte Array senden Netzwerkprogrammierung 2
M Byte Array kommt nicht an Netzwerkprogrammierung 0
A Server Antwort enthält JSON Objekt/Array Netzwerkprogrammierung 8
precoc String Array versenden Netzwerkprogrammierung 7
B Socket Byte-array Komprimieren Netzwerkprogrammierung 3
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
T Outputstream Byte-Array senden Netzwerkprogrammierung 2
U ein ganzes Array effizient übermitteln Netzwerkprogrammierung 6
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
O Über Socket Array versenden Netzwerkprogrammierung 5
A array übers netzwerk (anfänger) Netzwerkprogrammierung 8
S Socket-Array vs. MulticastSocket Netzwerkprogrammierung 2
B HEX String zu einem Byte Array ? *verzweiflung* :( Netzwerkprogrammierung 16
P Array per Socketverbindung versenden Netzwerkprogrammierung 2
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
J Prblem, wenn im verschickten Objekt ein Array ist Netzwerkprogrammierung 4
M RMI AbstractTableModel als Data Transfer Object (DTO) nutzen Netzwerkprogrammierung 0
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
B XMLRPC-Schnittstelle. Einzelne Felder aus dem Object auslesen Netzwerkprogrammierung 2
0 Apache Commons File Object bekommen Netzwerkprogrammierung 4
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
W RMI Verschiedene Unterobjekte trotz selbem Remote Object Netzwerkprogrammierung 2
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
A Get a Bean from the session object Netzwerkprogrammierung 2
J RMI - Call-By-Object-Reference? Netzwerkprogrammierung 4
C Problem mit Object-Stream Netzwerkprogrammierung 3
S RMI ExportException object already exported Netzwerkprogrammierung 1
R RMI: Remote Object ohne Naming Service benutzen? Netzwerkprogrammierung 2
S object via post auf servlet send und weiter bearbeiten Netzwerkprogrammierung 11
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
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
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

Ähnliche Java Themen

Neue Themen


Oben