Socket Senden und abspeichern

KingOfExceptions

Bekanntes Mitglied
Hallo,

ich habe ein kleines problem, da ich ein bild über ein Socket senden und dann auch abspeichern wollte. wo mein fehler liegt weiß ich nicht, daher frage ich euch ja ;) bin noch relativ neu mit netzwerkprogrammierung und in- bzw. outputstreams.....

client:

Java:
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.*;


public class BerichtDatenbankClientHochladen
{
	Socket sock;
	File f;
	String file;
	FileOutputStream fileOut;
	
	public static void main(String[]args)
	{
		BerichtDatenbankClientHochladen client=new BerichtDatenbankClientHochladen();
		client.los();
	}
	
	public void los()
	{
		JFrame fr=new JFrame();
		FileDialog frame=new FileDialog(fr, "Hochladen",FileDialog.LOAD);
		netzwerkEinrichten();
		frame.show();
		file=frame.getDirectory()+frame.getFile();
		
		f=new File(file);

		if(frame.getDirectory()!=null||frame.getFile()!=null)
		{
			bildSenden();
		}
		
		
	}
	
	private void netzwerkEinrichten()
	{
		try
		{
			sock=new Socket("localhost",5000);
			
			JOptionPane.showMessageDialog(null, "Verbindung hergestellt");
		}
		catch(IOException ex)
		{
			JOptionPane.showMessageDialog(null, "Verbindung konnte nicht hergestellt werden");
		}
	}
	
	private void bildSenden()
	{
		try {
			fileOut=new FileOutputStream(f);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			fileOut.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
		System.out.println(file);
	}
	
}

server:

Java:
import java.net.*;
import java.io.*;
 
public class BerichtDatenbankServer 
{
    public BerichtDatenbankServer(int port) throws Exception 
    {
        ServerSocket socketServer = new ServerSocket(port);
        while (true) 
        {
            Socket client = socketServer.accept();
            File file=new File("test.jpg");
            FileInputStream fileIn = new FileInputStream(file);
            
            fileIn.close();
           
        }
    }
    
    public static void main(String[]args)
    {
    	try {
			new BerichtDatenbankServer(5000);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}
 
N

nillehammer

Gast
Habe den Code nicht in allen Einzelheiten nachvollzogen, aber auf jeden Fall verwendest Du die Streams nicht richtig. Du musst immer von Deinem Programm aus denken. Wenn Du also in Dein Programm was reinladen willst, brauchst Du InputStreams, wenn Du von Deinem Programm aus was wegschreiben willst, brauchst Du OutputStreams. In Deinem Beispiel wäre also das folgende richtig:
1. Client: FileInputStream zum Laden einer Bilddatei von Festplatte, SocketOutputStream zum wegschreiben über Netzwerk
2. Server: SocketInputStream zum Empfang der von Client gesendeten Daten, FileOutputStream zum wegspeichern der Datei.
 

KingOfExceptions

Bekanntes Mitglied
könnte mir jemand das programm umschreiben,sodass der server das bild bekommt und der client es abschickt?

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

public class FileServer {
  public static void main (String [] args ) throws IOException {
    // create socket
    ServerSocket servsock = new ServerSocket(13267);
    while (true) {
      System.out.println("Waiting...");

      Socket sock = servsock.accept();
      System.out.println("Accepted connection : " + sock);

      // sendfile
      File myFile = new File ("source.pdf");
      byte [] mybytearray  = new byte [(int)myFile.length()];
      FileInputStream fis = new FileInputStream(myFile);
      BufferedInputStream bis = new BufferedInputStream(fis);
      bis.read(mybytearray,0,mybytearray.length);
      OutputStream os = sock.getOutputStream();
      System.out.println("Sending...");
      os.write(mybytearray,0,mybytearray.length);
      os.flush();
      sock.close();
      }
    }
}

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

public class FileClient{
  public static void main (String [] args ) throws IOException {
    int filesize=6022386; // filesize temporary hardcoded

    long start = System.currentTimeMillis();
    int bytesRead;
    int current = 0;
    // localhost for testing
    Socket sock = new Socket("127.0.0.1",13267);
    System.out.println("Connecting...");

    // receive file
    byte [] mybytearray  = new byte [filesize];
    InputStream is = sock.getInputStream();
    FileOutputStream fos = new FileOutputStream("source-copy.pdf");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    bytesRead = is.read(mybytearray,0,mybytearray.length);
    current = bytesRead;

    // thanks to A. Cádiz for the bug fix
    do {
       bytesRead =
          is.read(mybytearray, current, (mybytearray.length-current));
       if(bytesRead >= 0) current += bytesRead;
    } while(bytesRead > -1);

    bos.write(mybytearray, 0 , current);
    bos.flush();
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    bos.close();
    sock.close();
  }
}
 
S

SlaterB

Gast
- stelle dir geistig Zeile 14 in beiden Codeblocks vor,
- setze dort jeweils die Schere an, du erhälst insgesamt 4 Codeblöcke,
- nimm den unteren vom Server/ vom Client und setze ihn beim anderen, beim Client bzw. beim Server ran
- fertig ;)

ok, benötigte Variablen, also quasi den Block
Java:
    int filesize=6022386; // filesize temporary hardcoded
 
    long start = System.currentTimeMillis();
    int bytesRead;
    int current = 0;
vom Server auch noch in den Client verschieben, aber das merkt man schon wenn über fehlende Variablen gemeckert wird,
"filesize=6022386" und anderes sowieso noch zu ändern,
wie anfangs erwähnt eher Schleifen mit rein, kein ideales Beispiel,

naja, ohne Programmierfähigkeit gehts nicht, Streams mit Schleifen zu durchlaufen ist ein Standardthema

Galileo Computing :: Java ist auch eine Insel - 15 Einführung in Dateien und Datenströme
wobei dort jedes byte einzeln gelesen wird, kein Array von mindesten paar Tausend bytes dabei..,
braucht schon Erfahrung und Beispiele
 

KingOfExceptions

Bekanntes Mitglied
ok hab ich gemacht... sieht jetzt so aus:

Java:
import java.net.*;
import java.io.*;
 
public class BerichtDatenbankServer {
  public static void main (String [] args ) throws IOException {
    // create socket
    ServerSocket servsock = new ServerSocket(13267);
    int filesize=6022386; // filesize temporary hardcoded
    
    long start = System.currentTimeMillis();
    int bytesRead;
    int current = 0;
    
    while (true) {
      System.out.println("Waiting...");
 
      Socket sock = servsock.accept();
      System.out.println("Accepted connection : " + sock);
 
   // receive file
      byte [] mybytearray  = new byte [filesize];
      InputStream is = sock.getInputStream();
      FileOutputStream fos = new FileOutputStream("test.jpg");
      BufferedOutputStream bos = new BufferedOutputStream(fos);
      bytesRead = is.read(mybytearray,0,mybytearray.length);
      current = bytesRead;
   
      // thanks to A. Cádiz for the bug fix
      do {
         bytesRead =
            is.read(mybytearray, current, (mybytearray.length-current));
         if(bytesRead >= 0) current += bytesRead;
      } while(bytesRead > -1);
   
      bos.write(mybytearray, 0 , current);
      bos.flush();
      long end = System.currentTimeMillis();
      System.out.println(end-start);
      bos.close();
      sock.close();
     
      }
    }
}

Java:
import java.net.*;
import java.io.*;
 
public class BerichtDatenbankClientHochladen{
  public static void main (String [] args ) throws IOException {
   
    // localhost for testing
    Socket sock = new Socket("localhost",13267);
    System.out.println("Connecting...");
 
 // sendfile
    File myFile = new File ("test.jpg");
    byte [] mybytearray  = new byte [(int)myFile.length()];
    FileInputStream fis = new FileInputStream(myFile);
    BufferedInputStream bis = new BufferedInputStream(fis);
    bis.read(mybytearray,0,mybytearray.length);
    OutputStream os = sock.getOutputStream();
    System.out.println("Sending...");
    os.write(mybytearray,0,mybytearray.length);
    os.flush();
    sock.close();
    
    
  }
}

jedoch gibt es wenn ich den client starte eine exception:

Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at BerichtDatenbankServer.main(BerichtDatenbankServer.java:25)
 
S

SlaterB

Gast
liegt vermutlich an
> int filesize=6022386; // filesize temporary hardcoded
falls deine Datei nicht zufällig 6 MB groß ist wird versucht mehr zu lesen als je kommt

weil ich dir das Beispiel eingebrockt habe, habe ich eben zum Ausgleich noch nach anderen Links gesucht,
aber ist gar nicht so leicht ein perfekt passendes Beispiel (Datei-Übertragung) zu finden, gerade noch mit Client dazu

ohne eigene Fähigkeiten geht es nicht,
ich poste noch einen Link
Java and WWW / A Web Server in 150 Lines

viel unnötiges drumherum mit HTML-Code,
dort ist aber mit
Java:
    private static void sendFile(InputStream file, OutputStream out)
    {
        try {
            byte[] buffer = new byte[1000];
            while (file.available()>0) 
                out.write(buffer, 0, file.read(buffer));
        } catch (IOException e) { System.err.println(e); }
    }
eine schöne Schleife zu sehen, die du beim Server, als auch beim Client verwenden könntest,
wenn beim Client der InputStream aus dem Socket kommt, der OutputStream ins File geht,

generell neige ich aber dazu hier jetzt nicht mehr zu antworten, nicht jedes Detail einzeln..
 
S

SlaterB

Gast
1. ausprobieren
2. im Programm ablesbar, der Code lautet

Java:
// sendfile
    File myFile = new File ("test.jpg");
    byte [] mybytearray  = new byte [(int)myFile.length()];
fällt dir da etwas zu Datei- oder Array-Länge auf?
 

4596

Mitglied
Könntest du machen, aber es gibt andere Wege:
die Methode read(byte[]) eines InputStreams gibt bei jedem Aufruf einen Integer zurück, der die Anzahl an gelesenen Bytes darstellt(normalerweise immer die Länge des übergebenen byte-Arrays). der Integer ist -1, wenn es nichts mehr zu lesen gibt.
Dadurch braucht man die Variable Filesize nicht mehr, da sich der Lesevorgang(und damit auch der Schreibvorgang) am Ende der Datei automatisch beenden(die letzten bytes könnten doppelt vorhanden sein, dadurch immer wenn read(byte[]) nicht die länge des Arrays zurückgibt immer den Array kürzen(mithilfe einer Schleife und eines zweiten Arrays).
 

KingOfExceptions

Bekanntes Mitglied
Bei 1. Die fehlermeldung ist genau die gleiche
Bei 2. Sorry verstehe ich nicht.... und wenn ich bei dem bild unten das hier ausführe:

Java:
import java.io.File;


public class test 
{
	public static void main(String[]args)
	{
		File myFile=new File("test.jpg");
		System.out.println((int)myFile.length());
	}
}

kommt 0 raus....

EDIT: Das gleiche ergebnis ist auch bei einer txt datei
 

Anhänge

  • test.JPG
    test.JPG
    51,6 KB · Aufrufe: 24
S

SlaterB

Gast
was liefert die Methode exists() ?
dann gibts noch getCanonicalPath(), mit Dateisystem vergleichen, die Dateien liegen wohl woanders als vermutet,

alles Dinge die dazugehören, denken denken denken,
was könnten Gründe für aktuellen Fehler sein, was kann ich selber tun außer aufgeben und andere fragen?

edit:
immerhin ein neues Testprogramm mit nur 2 Zeilen, löblich,
andere verharren immer in ihrem Komplettprogramm mit tausend Fehlern gleichzeitig
 
Zuletzt bearbeitet von einem Moderator:

KingOfExceptions

Bekanntes Mitglied
Java:
import java.io.File;
import java.io.IOException;

public class test 
{
	public static void main(String[]args)
	{
		File myFile=new File("test.jpg");
		File thisFile=new File("test.class");
		try {
			System.out.println(myFile.getCanonicalPath());
			System.out.println(thisFile.getCanonicalPath());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(myFile.exists());
		System.out.println(myFile.length());
	}
}

AUSGABE:

Code:
C:\Users\XXXX\eclipse\EinfachSoProgramme\test.jpg
C:\Users\XXXX\eclipse\EinfachSoProgramme\test.class
false
0

???:L :bahnhof:
 
S

SlaterB

Gast
wie war das noch mit selber versuchen?
hast du mal mit Explorer ins Dateisystem geschaut?..
bei Txt immer lustig Spielereien wie ausgeblendete Dateiendungen

wie hast du überhaupt das Bild in dein Projekt eingefügt?
für die Klasse wäre es denkbar, dass es Unterverzeichnisse src + bin gibt

wenn du dich auf Java beschränken möchtest:
new File(".") liefert das Grundverzeichnis des Projekts,
und dann gibts Methoden zur Auflistung der enthaltenen Dateien,
bei Unterverzeichnissen rekursiv auch dort reinschauen
 
S

SlaterB

Gast
der ist wahrlich beschränkt, etwa ohne die genannte Dateienendung, ist es wirklich jpg?
von thisFile hast du exists() noch nicht aufgerufen, das könnte sogar da sein

gib das Verzeichnis in Java aus,
Verzeichnis auslesen in Java
dann musst du ja beim Bild vorbeikommen, und da wird dann bestimmt exists() true ausgegeben (falls du entsprechende Befehle ergänzt),
vergleiche diese File-Objekt mit dem von dir erstellten, gib beide CanonicalPath direkt untereinander aus,
teste equals für die File- und die String-Objekte

ich bin jetzt länger nicht mehr da

wirklich tricky Thema inzwischen, Pech für dich (dass das so dauert, nicht dass ich weg bin ;) )
 

KingOfExceptions

Bekanntes Mitglied
ok ich hab alles gefunden(ich hab einfach das bild aus dem bin(in eclipse) genommen und dann hats gefuntzt... nächstes problem.....


Waiting...
Accepted connection : Socket[addr=/127.0.0.1,port=50130,localport=1234]

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.io.BufferedOutputStream.write(Unknown Source)
at BerichtDatenbankServer.main(BerichtDatenbankServer.java:36)

Was kann man da machen?!
 

KingOfExceptions

Bekanntes Mitglied
außerdem hab ich noch:

Java:
FileOutputStream fos = new FileOutputStream("test2.jpg");

zu
Java:
FileOutputStream fos = new FileOutputStream(new File("test2.jpg"));

geändert... ist das richtig? oder hab ich da was vollkommen falsch verstanden? so wie's aussieht finde ich dass die angekommene datei nicht abgespeichert wird oder?
 

KingOfExceptions

Bekanntes Mitglied
wo muss ich das einsetzen? was muss ich ersetzen? die fehlermeldung kommt aber bei dem server und nicht bei dem client... und muss ich die 1000 durch 58262 ersetzen? also das ergebnis von file.length() ?
 
S

SlaterB

Gast
das ist eine Methode die von einem Stream in einen anderen schreibt,
wenn du bei den vorhandenen Streams (etwa im Server FileInputStream + die von den Socktets) nicht durchschaust,
dann kann ich dir auch nicht helfen,

überlege ganz in Ruhe was eigentlich zu tun ist, da ist eine Datei, da ist ein FileInputStream, da ist ..
 
S

SlaterB

Gast
ordentliche Wartezeit ist das mindeste, aber mal bisschen weiter:

im von mir geposteten Link steht auch der Aufruf der Methode,
aber selbst diese grundlegene Möglichkeit (lesen was schon gepostet wurde) liegt dir fern?

Java:
OutputStream out = new BufferedOutputStream(connection.getOutputStream());
[..]
                                // send file
                                InputStream file = new FileInputStream(f);
                                [..]
                                sendFile(file, out); // send raw file

darf man fragen wieso du das ganze überhaupt machst?
dir selber bringt so eine Klasse doch wohl nicht viel,
Lerneffekt ist eher begrenzt,
als Aufgabe in Lehre oder Beruf wäre es bedenklich..
 

KingOfExceptions

Bekanntes Mitglied
naja ursprünglich dachte ich, dass das ganze einfacher wird.... vllt so wie ein chat oder so.... nur dass man halt einen Filestream benutzt.... aber jetzt merke ich dass das ganze doch ein "kleines bisschen" schwerer wird...
 

irgendjemand

Top Contributor
@TO

hmm ... verstehe irgendwie deine probleme nicht ...

auf server-seite

server-socket aufmachen
mit accept neuen socket holen -> THREAD
auf commandos warten wie z.b. file-size / -name und der gleichen
transfer über streams -> beim lesen in ein file rausschreiben
eventuell disconnect-commando zum "normalen" terminieren der verbindung

auf client-seite

verbindung über socket zum server herstellen
infos über file auslesen *mindestens größe und name*
commandos an server senden
datei einlesen und dabei gleich über den socket wegschreiben
verbindung terminieren

ist doch genau so simpel wie ein chat ... nur das die daten-quelle anstatt eine user-eingabe ein file ist ... und das man anstatt Reader und Writer dierekt byte-streams verwendet ...
ansonsten noch n bissl an der server-logik ändern das er die daten einfach auf platte schreibt anstatt zu broadcasten ... fertig ...

ich könnte dir jetzt stark optimierten code posten ... oder sogar ein link zu nem wunderschönen NIO beispiel ...

aber wo ist dabei der lerneffekt ? du lässt dich hier mit antworten und codes zuschütten die du versuchst durch copy&paste zusammenzubasteln ... aber lernen tust du hier offenbar nichts ...

auch würde ich erstmal den ganzen GUI kram weglassen und erstmal die logik ans laufen bekommen ... die GUI kannst du später immer noch drum bauen ...


und nein ... ich werde dir jetzt NICHT mit codes oder links helfen ... denn alles was du machen willst kann man mit hilfe der API-doc sowie google *da schon tausendfach so als frage gestellt und beantwortet* lösen ...
ob du dabei was lernst oder nich liegt an dir ... aber dich mit lösungen zu bomben wird hier keiner machen ... zumindest nicht kostenlos da das ganze ja scheinbar für ne ausbildung oder so ist und dafür das du eigentlich dein eigenes hirn anstrengen sollst ebenfalls geld bekommst ...

warum sollen wir davon nichts abbekommen wenn wir unsere hirne für dich arbeiten lassen ...
 

KingOfExceptions

Bekanntes Mitglied
Tja so dachte ich mir das auch.... aber SlaterB meinte man müsse dort auch mit ByteArrays usw. arbeiten. Das habe ich dann nicht verstanden...

Ich werde mich wahrscheinlich jetzt erstmal von Java ist auch eine Insel und Java von Kopf bis Fuß "berieseln" lassen, bzw. versuchen das Ganze zu verstehen.

Und zum Thema Geldverdienen/Ausbildung: Ich glaube nicht, dass man mit 14 Jahren schon an der Uni oder Fachhochschule ist, geschweige denn Geld verdient. Aber die Leute, die das machen könnten wollen ja immerhin nicht ihre Zeit einfach so verschenken, das ist ok.

Das Thema werde ich vorerst schließen und dann bei Gelegenheit vielleicht noch einmal öffnen oder eine neues eröffnen.

Vielen Dank an SlaterB, irgendjemand und 4596, für ihre Zeit und ihre Mühen.
 

4596

Mitglied
Die Lösung der ArrayIndexOutOfBoundsException ist simpel, sie wird geworfen, wenn die Länge des Arrays überschritten wurde(z.B:Arraylänge ist 10 abgefragt wird Feld 15), dabei ist zu beachten, dass das erste Feld eines Arrays die Nummer 0 hat, und das letzte Feld hat als Nummer die Länge des Arrays minus 1(!!). Sie tritt auch auf, wenn negative Felder abgefragt werden.
Als lösung zum Schaufeln zwischen Streams hier der Code:
Java:
InputStream is;//bitte im Programm noch initialisieren
OutputStream os;//bitte im Programm noch initialisieren
byte[] b=new byte[1024];//1024 ist mein Standart, kann aber auch größer bzw. kleiner sein.
int i;
while(true) {
i=is.read(b);
if(i==-1) {//Ende des Inputs
break;
}
else if(i<b.length) {//damit kein byte doppelt gelesen wird
byte[] b2=new byte[i];
for(int j=0;j<i;j++) {
b2[j]=b[j];
}
os.write(b2);
}
else {
os.write(b);
}

Dieser Quellcode schaufelt Bytes vom InputStream zum OutputStream.
Natürlich kann es auch ein FileInput- oder FileOutputStream sein.
Kein Byte wird doppelt gelesen, und es wird auch kein Byte vergessen.
 

irgendjemand

Top Contributor
Die Lösung der ArrayIndexOutOfBoundsException ist simpel, sie wird geworfen, wenn die Länge des Arrays überschritten wurde(z.B:Arraylänge ist 10 abgefragt wird Feld 15), dabei ist zu beachten, dass das erste Feld eines Arrays die Nummer 0 hat, und das letzte Feld hat als Nummer die Länge des Arrays minus 1(!!). Sie tritt auch auf, wenn negative Felder abgefragt werden.
Als lösung zum Schaufeln zwischen Streams hier der Code:
Java:
InputStream is;//bitte im Programm noch initialisieren
OutputStream os;//bitte im Programm noch initialisieren
byte[] b=new byte[1024];//1024 ist mein Standart, kann aber auch größer bzw. kleiner sein.
int i;
while(true)
{
	i=is.read(b);
	if(i==-1)
	{//Ende des Inputs
		break;
	}
	else
	{
		if(i<b.length)
		{//damit kein byte doppelt gelesen wird
			byte[] b2=new byte[i];
			for(int j=0;j<i;j++)
			{
				b2[j]=b[j];
			}
			os.write(b2);
		}
		else
		{
			os.write(b);
		}
	}
}

Dieser Quellcode schaufelt Bytes vom InputStream zum OutputStream.
Natürlich kann es auch ein FileInput- oder FileOutputStream sein.
Kein Byte wird doppelt gelesen, und es wird auch kein Byte vergessen.

AUA ...
nach dem ich deinen code erstmal sauber formatiert und um fehlende klammern ergänzt habe muss ich dich mal fragen :

du kennst aber schon die methode [c]OutputStream.write(byte[], int, int)[/c] oder ?

damit lässt sich dein code auf folgendes deutlich besseres kürzen

Java:
InputStream is;//bitte im Programm noch initialisieren
OutputStream os;//bitte im Programm noch initialisieren
byte[] b=new byte[1024];//1024 ist mein Standart, kann aber auch größer bzw. kleiner sein.
int i=0;
while(true)
{
	i=is.read(b);
	if(i==-1)
	{//Ende des Inputs
		break;
	}
	else
	{
		os.write(b, 0, i);
	}
}

um das ganze jetzt NOCH weiter zu optimieren und vor allem leichter lesbar zu machen optimiere ich mal noch dein endlos-while *ganz evil !!!*

Java:
InputStream is;//bitte im Programm noch initialisieren
OutputStream os;//bitte im Programm noch initialisieren
byte[] b=new byte[1024];//1024 ist mein Standart, kann aber auch größer bzw. kleiner sein.
int i=0;
while((i=is.read(b))!=-1)
{
	os.write(b, 0, i);
}

nur um dir mal zu zeigen WIE EINFACH sowas wirklich geht ...
btw : der zähler *in deinem fall "int i"* sollte IMMER initialisiert werden ...
 

KingOfExceptions

Bekanntes Mitglied
*ganz vorsichtiges melden* mein problem liegt eigentlich daran, dass ich nicht verstehe, was diese bytes bei einer übertragung eines bildes zu suchen haben.....
 

4596

Mitglied
*ganz vorsichtiges melden* mein problem liegt eigentlich daran, dass ich nicht verstehe, was diese bytes bei einer übertragung eines bildes zu suchen haben.....

Jede Datei besteht aus Bytes, und dadurch ist es so, dass nur Bit's und Bytes übertragen werden können, und daher müssen da Bytes im Programm sein. Außerdem gibt es keine Methode eines InputStreams, die einen Byte[] zurückgibt.(Weil ja noch ein Integer zurückgegeben werden muss[außer bei read()])

Zu dir irgendjemand, das, was ich schrieb, war kein vollständiges Programm, sondern nur ein Ausschnitt aus einer Methode, und da ich etwas erklären wollte hab ich NICHT die verkürzte Version genommen.
 

irgendjemand

Top Contributor
Zu dir irgendjemand, das, was ich schrieb, war kein vollständiges Programm, sondern nur ein Ausschnitt aus einer Methode, und da ich etwas erklären wollte hab ich NICHT die verkürzte Version genommen.

aus was für einem schwachsinn von beispiel hast du den müll denn bitte ?

2 arrays ... manuelles umkopieren *hier hätte eigentlich JEDER der halbwegs plan von java hat zumindest arrayCopy verwendet* ... endlos-while an einer stelle wo das weder sinn macht noch überhaupt was zu suchen hat ... unnötige verlängerung des stack *OutputStream.write(byte[]) callt intern OutputStream.write(byte[], 0, byte[].length)* ...

sorry ... aber dein beispiel ... und vermutlich auch der rest des codes wo du das rauskopiert hast ... sind sowas von absoluter schwachsinn ...

java hat genau dafür schon methoden und syntax die eine deutliche verkürzung des codes erlauben *siehen mein beispiel* ...

außerdem würde jedes intiligente performance-programm sowie profiler dir zumindest dein while(true) anmeckern ... da auch laut SUN ein while(boolean) zu bevorzugen ist *z.b. um "endlos" threads stoppen zu können* ...

dein code ist NICHT einfach ... eher im gegenteil ... einen anfänger verwirrt er nur noch mehr ... und es ist echt absolut unsauber ... hält sich nicht wirklich an conventions ... und ist was performance angeht bestimmt einer der schlechtesten codes die ich je zum "umkopieren" von daten aus einem InputStream in einen OutputStream gesehen habe ...


@TO
erlich jetzt ? ... nein wirklich ... ERLICH ?

um jetzt mal nicht komplett auszuticken : du weist schon das JEDE information in der IT aus Bits und Bytes *gruppen von je 8 Bit* besteht ... oder ?
ergo : kannst du auf der untersten hardware schicht auch nur Bits als folge von pegel-änderungen übertragen ...
alles andere ... text-dateien , bilder , musik oder sogar videos und programme ... sind nichts weiter als eine extrem abstrahierte darstellungsform dieser bit-folgen ... und ob diese nun als bild oder sonst was interpretiert werden hängt davon welche bytes in welcher reihenfolge stehen ...

natürlich kannst du auch "ein bild" übertragen ... das nennt sich dann "serialisierung" ...
was dabei passiert sagt der name eigentlich schon : komplexe zusammenhängende datenblöcke eines objekts werden aus dem RAM in einen seriellen byte-strom umgewandelt so das dieser dann z.b. auf laufwerke gespeichert oder übers netz versendet werden kann ...
der umgekehrte vorgang heißt de-serialisieren ... dabei werden die byte-folgen wieder gemäß ihrer zugehörigen klasse in ein komplexes objekt umgewandelt mit dem man dann weiter arbeiten kann ...

mal meine ganz erliche meinung : du hast nicht nur keine ahnung von java ... sondern überhaupt kein fundiertes grundwissen über die funktionsweise eines modernen pc ...
ich lege dir echt ans herz das du dir zumindest zu diesem thema mal eine crash-course reinziehst ... damit du auch mal die zusammenhänge verstehst warum etwas genau so und nicht anderst gemacht wird und was dabei im inneren des rechners passiert ...
aber so wie das mommentan aussieht : kein plan von garnichts ... wird es dir nur sehr wenig bis garnicht helfen wenn wir dir *und wenn auch nur zum hobby* irgendwelche codes posten ... für deren begreifen du scheinbar nicht in der lage zu sein scheinst ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
M Socket Senden an alle verbundenen Clients Netzwerkprogrammierung 3
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
E Socket Befehl senden und antowrt bekommen ! Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
L Socket Nachrichten senden Netzwerkprogrammierung 3
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
M Socket Bilder senden Netzwerkprogrammierung 1
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
W Socket Byte Array senden Netzwerkprogrammierung 2
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
M MultiClient Server - Senden an alle Clients Netzwerkprogrammierung 8
X UDP - Zu großes Paket senden Netzwerkprogrammierung 1
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
M Teilnehmerliste vom Server auch an alle Clients senden Netzwerkprogrammierung 0
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
I Kleine Dateien senden Netzwerkprogrammierung 3
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
S Server-Client: Image senden Netzwerkprogrammierung 2
B Socket BufferedImage senden "ohne speichern" Netzwerkprogrammierung 7
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
D Strings per Schleife zum Client senden Netzwerkprogrammierung 4
D daten per post senden Netzwerkprogrammierung 3
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
F Verschiedene Datentypen senden Netzwerkprogrammierung 4
M Befehle an externes Java-Programm senden Netzwerkprogrammierung 8
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
Weltall 7 HTTP Dateien an PHP-Skript senden Netzwerkprogrammierung 11
T Outputstream Byte-Array senden Netzwerkprogrammierung 2
N Senden eines Arrays Netzwerkprogrammierung 6
F Char über Netzwerk senden Netzwerkprogrammierung 6
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15
J Befehle an Server senden Netzwerkprogrammierung 5
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
Kr0e Ggf. Performanceproblem durch Senden von vielen kleinen Buffern Netzwerkprogrammierung 17
S Socket OutputStreams senden zu oft Netzwerkprogrammierung 6
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
F Erhalten und Senden von Nachrichten anhand des Indexes des Clients Netzwerkprogrammierung 19
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
KeNnY_tHe_OwNeR Empfangen geht, Senden nicht ?! Netzwerkprogrammierung 18
B Befehle an Gameserver senden bzw. empfangen Netzwerkprogrammierung 2
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
T HttpClient - Senden via Post Netzwerkprogrammierung 12
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
M Dateien über TCP/IP senden Netzwerkprogrammierung 18
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
R Mehrere Dateien über einen Socket senden Netzwerkprogrammierung 2
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
G Information an Server senden? Netzwerkprogrammierung 4
D PDF und integer senden Netzwerkprogrammierung 6
M BufferedImage an PHP-Script senden Netzwerkprogrammierung 4
J Problem beim Senden von File Netzwerkprogrammierung 4
S String[] über Socket senden Netzwerkprogrammierung 3
G unbekannte Zeichen beim senden und lesen Netzwerkprogrammierung 2
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
T Image aus Applet an PHP Seite senden? Netzwerkprogrammierung 3
D BufferedImage über das Netzwerk senden Netzwerkprogrammierung 2
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
A Broadcast - senden eines Packetes an alle rechner im netz Netzwerkprogrammierung 15
R Bytes als Rohdaten über Socket senden Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
W Hexadezimal über RS232 senden Netzwerkprogrammierung 9
L webformular automatisch erstellen, senden und auswerten . Netzwerkprogrammierung 2
G Anfrage an Suchmaschine senden Netzwerkprogrammierung 11
M TCP Socket und Server int senden und empfangen Netzwerkprogrammierung 6
M datagramSocket senden u. empangen? Netzwerkprogrammierung 2
V Java /Matrizen senden über TCP/IP / double Netzwerkprogrammierung 2
W Socket Client-Server Verbindung. Wie Strings senden? Netzwerkprogrammierung 6
M HTTP Requests verarbeiten und Response senden mit Java Netzwerkprogrammierung 14
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
K RMI und kontinuirliches senden von Datenpacketen Netzwerkprogrammierung 2
N Messwerte über TCP senden Netzwerkprogrammierung 3
F Datei senden und empfangen Netzwerkprogrammierung 4
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
N Hexcode an ein Programm senden. Netzwerkprogrammierung 4
I Dateien schnell/synchron senden Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
B Variablen an Server senden Netzwerkprogrammierung 14
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
G Strings über Sockets senden Netzwerkprogrammierung 5
J JavaMail Exception bei senden an anderen Server. Netzwerkprogrammierung 8
TRunKX Hilfe beim senden und empfangen Netzwerkprogrammierung 2
A Webserver - Bild senden Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben