Bild/Datei von einem Server an einen Client senden

Status
Nicht offen für weitere Antworten.

BlackWizard

Mitglied
Hallo zusammen :cool:!

Wir wollen eine Datei von einem selbstgeschriebenen Server an einen selbstgeschriebenen Client senden. Wenn das geklappt hat, soll der Client die Datei dann auch per awt anzeigen (das sollte das kleinere Problem sein).

Wir haben bis jetzt folgendes vorzuweisen:

Client:

Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

import javax.swing.BorderFactory;
import javax.swing.border.Border;

   public class gui extends Frame{
      private static final long serialVersionUID = 1L;

  
      static ServerSocket tcpSocket;
   static File saveFile;
  
     class TestActionListener implements ActionListener
     {
       public void actionPerformed(ActionEvent e)
         {
             
             
                                       try {
               Socket server = new Socket (IP_Adresse, Port);
               InputStream input = server.getInputStream();
                 OutputStream output = server.getOutputStream();
                 output.write(pixel_zahl1);
                 output.write(pixel_zahl2);
                 output.flush();
                 System.out.println(input.read());
                 server.close();
                 input.close();
                 output.close();
           } catch (UnknownHostException e1) {
               // TODO Auto-generated catch block
               e1.printStackTrace();
           } catch (IOException e1) {
               // TODO Auto-generated catch block
               e1.printStackTrace();
           }
                      try {

                byte[] fileStream = new byte[1000000];

                FileOutputStream fileOutput = new FileOutputStream("bild2.gif");

                Socket server = tcpSocket.accept();        
                InputStream in = server.getInputStream();
                byte[] buffer = new byte[1024];
                                for (int n; (n = in.read(buffer)) != -1; fileOutput.write(buffer, 0, n));
               
                                in.close();
                fileOutput.close();
                server.close();
                tcpSocket.close();

             } catch (IOException e1) {
                System.out.println("Ausgabe fehler");
                 //e.printStackTrace();
             }
                                 }
     }
               public static void main (String args[])
     {
         new gui();
              }
}


Server:
Code:
import java.net.*;
import java.io.*;

public class KleinerServer2 {
   ServerSocket server = new ServerSocket(1234);
   
   KleinerServer2() throws IOException{
      while(true){
         Socket client = server.accept();
         InputStream input = client.getInputStream();
         OutputStream output = client.getOutputStream();
         int zahl1 = input.read();
         int zahl2 = input.read();
         output.write(zahl1+zahl2);
         output.flush();
         input.close();
         output.close();
      }
   }
   public static void main(String[] argv){
      try {
         new KleinerServer2();
      }
      catch(IOException e){
         System.out.println(e);
      }
   }
}


Es ist klar, dass der Server nicht die gewünschte Funktion erfüllt. Unser unangepasster Client (ohne Code zum Datei-Erzeugen, nur Übergabe von int's zum Addieren) kommunizierte aber schon gut mit dem obigen Server. Die Frage ist jetzt: Wie senden wir eine lokale Datei vom Server per Netzwerk an den Client? Und wie sieht der Empfang dann korrekt auf dem Client aus? Wir haben versucht uns für beide Programme das Benötigte aus verschiedenen Threads zusammenzulesen:

http://www.java-forum.org/de/topic47154_socket-client-server-verbindung-wie-strings-senden.html
http://www.java-forum.org/de/viewtopic.php?t=33319&highlight=datei+senden
http://www.java-forum.org/de/viewtopic.php?t=48460&highlight=datei+netzwerk

Leider haben wirs nicht geschafft eine Datei zu senden. Der Client erstellt zwar eine Datei, diese ist aber immer 0 Byte groß. Intelligenterweise habe ich den Code des Servers der das Bild öffnet und als Stream an den Client senden sollte unwiderbringlich gelöscht. Das war das dumme Resultat eines Versuchs, die Art der Erzeugung des Datenstreams zu verändern (neue Datei erstellt, alte gelöscht...*selbstgeißel*). Das Bild liegt lokal im Verzeichnis des Servers und heißt z.B. "smiley.gif".

Wie dem auch sei, wir stehen auf dem Schlauch. Für jegliche Hilfe sind wir überaus dankbar :).

mfg,
BlackWizard
 
S

SlaterB

Gast
zwei Tipps:
1.)
Code a la
Code:
 txt_Pixel_Zahl2 = new TextField("Zahl 2");
       txt_Pixel_Zahl2.setBounds(190, 90, 100, 20 );  // x, y, breite, höhe
       add(txt_Pixel_Zahl2);
ist total störend für so eine Problemstellung,
ich z.B. lese da gar nicht mehr weiter,
ich wette der Client macht nicht mehr als auch in 50 Zeilen gut reinpassen würde
(weiß ich natürlich nicht genau, da ich nicht weiter angeschaut habe ;) )

Konsolenprogramm!
System.out.println!

------

2.
> Leider haben wirs nicht geschafft eine Datei zu senden. Der Client erstellt zwar eine Datei, diese ist aber immer 0 Byte groß.

was soll das für ein merkwürdiger Fehler sein?
du hast da doch zwei voneinander unabhängige Probleme:
zum einen die Bits von Server zum Client zu senden
und dann die Bits anzuzeigen oder zu speichern,

wie kann ein Speicherproblem etwas mit dem Senden vom Server zum Client zu tun haben?
es gibt nur einen sinnvollen Test: sende 'xyz'
und gib das beim Client mit
System.out.println
aus, funktioniert das, ja oder nein,

gleich 1 Mio. Bytes zu senden und diese ungeprüft weiterzuverarbeiten,
das kann ja nix werden.. (bzw. dann nicht wundern)

------

wieder zu Punkt 1:
falls andere auch bei dem konfusen Frage-Aufbau helfen: gut,

ansonsten ein Standard-Beispiel aus Lehrbüchern verwenden,
( http://www.galileocomputing.de/open...16_008.htm#mja069999c6fdbbfa7e611f94d70697c9f )

was funktioniert daran nicht?
 

thomator

Bekanntes Mitglied
Also nur mal so als Randbemerkung: Versucht einfach mal, das Ganze sauber zu kapseln. Das ist eines der Ziele der OOP. In einer Klasse ActionListener den Server aufzubauen ist nicht unbedingt nachvollziehbar und hat mich vom Versuch, den Quellcode mal zu lesen und nachzuvollziehen, sehr schnell abgebracht. :wink:
 

BlackWizard

Mitglied
Wir haben den Code mal etwas gekürzt, hoffentlich ists jetzt übersichtlicher. Die Kapselung ist noch nicht verändert, aber man steigt wohl durch.
 

BlackWizard

Mitglied
Hier der geänderte Code. Wichtig dabei ist, dass wir nun eine völlig andere Implementierung haben. Das Bild wird nicht vom Server erzeugt, sondern es werden nur berechnete Koordinaten in Form eines Integer-Arrays (int[][]) an den Client übergeben. Dieser erzeugt anhand der neuen Koordinaten dann das Bild. Das Übertragen der Informationen funktioniert soweit wunderbar, nur das Bild wird nicht beim Client angezeigt.

Zur Info: Es geht erstmal darum nur ein schwarzes Rechteck zu erzeugen, eine übertragene 0 steht für schwarz, eine 1 für weiß (wid nie übertragen, ist auch irrelevant).

Hier der Server:

Code:
import java.net.*;
import java.io.*;

public class ServerClass {
   ServerSocket server = new ServerSocket(5678);//Lausche auf Port 5678
   
   ServerClass() throws IOException{
  
	  
      while(true){
         Socket client = server.accept();
         InputStream client_input = client.getInputStream();
         DataInputStream input = new DataInputStream(client_input);
         OutputStream client_output = client.getOutputStream();
         DataOutputStream output = new DataOutputStream(client_output);
      
         int x,y;
         int[][] bild_array;   
         
         double eckpunk_x1 = input.readDouble();
         double eckpunk_x2 = input.readDouble();
         double eckpunk_y1 = input.readDouble();
         double eckpunk_y2 = input.readDouble();
         
         int pixel_x = input.readInt();
         int pixel_y = input.readInt();
         
         int anz_Farben = input.readInt();
         
         int iteration = input.readInt();
         
         int typ = input.readInt();
         
         //Ausgabe von den ¸bergebenen Daten
         System.out.println("eckpunk_x1: " + eckpunk_x1);
         System.out.println("eckpunk_x2: " + eckpunk_x2);
         System.out.println("eckpunk_y1: " + eckpunk_y1);
         System.out.println("eckpunk_y2: " + eckpunk_y2);
         
         System.out.println("pixel_x: " + pixel_x);
         System.out.println("pixel_y: " + pixel_y);
         System.out.println("iteration: " + iteration);
         System.out.println("anz_Farben: " + anz_Farben);
         System.out.println("typ: " + typ);
         
         
         
        //Hier werden die Bilder-Koordinaten generiert und an den Client zurückgesendet
        bild_array= new int [pixel_x][pixel_y];
        for (y = 0; y < pixel_y; y++){
        	
        	for (x = 0; x < pixel_x; x++){
        		
        		bild_array[x][y] = 0;
        		System.out.print("0");
        		output.writeInt(bild_array[x][y]);
        		
        		}
        	
        System.out.println();
        	
        }
         
     
         input.close();
         
         output.flush();
         output.close();
      }
   }
   public static void main(String[] argv){
      try {
         new ServerClass();
      }
      catch(IOException e){
         System.out.println(e);
      }
   }
}


Und hier der Teil Code des Client-Codes, welcher eigentlich zur Bild-Erstellung gedacht war (der komplette Client, mit einigen überflüssigen Einträgen wie ihr sehen werdet, findet ihr unter http://www.firefrogz.de/index.php/Java_Temp-Paste ):

Code:
				      pixel_array = new int[pixel_x][pixel_y];
				      
				      Graphics g = null;
				      lbl_Anzeige.setBackground(Color.BLUE);
				      
				       for(int lauf_y = 0; lauf_y < pixel_y; lauf_y++){
				    	   
				    	   for(int lauf_x = 0; lauf_x < pixel_x; lauf_x++){
				    		   
				    		   pixel_array[lauf_x][lauf_y] = data_input.readInt();
				    		   System.out.print(pixel_array[lauf_x][lauf_y]);
				    		   
				    		   
				    		   if(pixel_array[lauf_x][lauf_y]==0){
				    		
				    			   g.setColor(Color.BLACK); 
				    		       g.fillRect( lauf_x + 811, lauf_y + 51, 1, 1 );
				    		       lbl_Anzeige.paint(g);
				    		         
				    		   }
				    		   /*
				    		  else if(pixel_array[lauf_x][lauf_y]==1){
				    			   g.setColor(Color.WHITE); 
				    		       g.fillRect( lauf_y + 50, lauf_x + 810, 1, 1 );
				    		   }
				    		   */
				    		   
				    	   }
				    	   System.out.println();
				    	   
				       }

Ohne die ganzen Graphics-Einträge printet der ohne Probleme die vom Server übertragenen Zahlen aus. Übrigens, wie stelle ich es an, dass ich bspw. den Server über eine Konsole starte? Bis jetzt haben wir immer zwei verschiedene Rechner und Eclipse dafür benutzt, das ganze über localhost laufen zu lassen würde uns erlauben auch alleine nach Fehlern zu suchen. Client unter Eclipse, Server in der normalen Konsole.

mfg und DANKE nochmal,
BlackWizard
 
S

SlaterB

Gast
> Übrigens, wie stelle ich es an, dass ich bspw. den Server über eine Konsole starte?

java Programmname

?

----------

verstehe ich jetzt richtig, dass es nun keine Probleme in der Übertragung mehr gibt,
sondern nur die Zeichnung einer Grafik nicht funktioniert?

passend in diesem Thread ;)

man zeichnet in einer GUI mit paintComponent, was ist davon vorhanden?
eine TestGUI gerne mit Thread oder so ist immer noch maximal 100 Zeilen lang,
Server/ Client-Code ist da aber völlig fehl am Platze, was hat die Quelle der Daten mit dem Zeichnen zu tun?

bitte lauffähiges kurzes Programm posten indem der Fehler auftritt,
und was ist der Fehler? kein Bild/ Exception/ ..?
 

skullbocks

Mitglied
Hi,

das hier beschreibene Problem hat sich erledigt, wir haben ein neues Problem aufgetan und einen neuen Thred gestartet.

Vielen Dank für eure Hilfe

mfg

skullbocks & BlackWizard
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
N Test Datei = Bild Java Basics - Anfänger-Themen 5
T jar datei Bild hinzufügen Java Basics - Anfänger-Themen 4
Mal Bild Datei mit Tags von Website laden Java Basics - Anfänger-Themen 9
S Bild aus Jar-Datei öffnen Java Basics - Anfänger-Themen 7
F Bild einmal aus Datei laden und in Klasse speichern Java Basics - Anfänger-Themen 3
F Bild in Datei Java Basics - Anfänger-Themen 4
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben