Java sendet und empfängt Dateien (Byte []) über Sockets
Ich versuche zu entwickeln, die eine sehr einfache client /server, wo der client wandelt eine Datei in bytes, sendet es an den server, und dann wandelt die bytes in einer Datei.
Derzeit das Programm erzeugt nur eine leere Datei. Ich bin nicht eine fantastische Java-Entwickler, so dass jede Hilfe sehr geschätzt.
Dies ist der server-Teil, das empfängt, was der client sendet.
ServerSocket serverSocket = null;
serverSocket = new ServerSocket(4444);
Socket socket = null;
socket = serverSocket.accept();
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
byte[] bytes = new byte[1024];
in.read(bytes);
System.out.println(bytes);
FileOutputStream fos = new FileOutputStream("C:\\test2.xml");
fos.write(bytes);
Und hier ist der client-Teil
Socket socket = null;
DataOutputStream out = null;
DataInputStream in = null;
String host = "127.0.0.1";
socket = new Socket(host, 4444);
out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
File file = new File("C:\\test.xml");
//InputStream is = new FileInputStream(file);
//Get the size of the file
long length = file.length();
if (length > Integer.MAX_VALUE) {
System.out.println("File is too large.");
}
byte[] bytes = new byte[(int) length];
//out.write(bytes);
System.out.println(bytes);
out.close();
in.close();
socket.close();
InformationsquelleAutor der Frage Rookie | 2012-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die richtige Methode zum kopieren eines Streams in Java ist wie folgt:
Wünschte, ich hätte einen dollar für jedes mal habe ich geschrieben, dass in einem forum.
InformationsquelleAutor der Antwort EJP
Danke für die Hilfe, ich habe es geschafft, es funktioniert jetzt, so dachte, ich würde post, damit die anderen verwenden können, um Ihnen zu helfen.
Server
und der Client
InformationsquelleAutor der Antwort Rookie
Hier ist der server
Öffnen Sie einen stream auf die Datei und senden Sie es overnetwork
Hier ist der client
Erhaltet die Datei gesendet overnetwork
InformationsquelleAutor der Antwort Jay Godara
Zu vermeiden, die Begrenzung der Größe der Datei , die kann dazu führen, die Ausnahme
java.lang.OutOfMemoryError
geworfen werden beim erstellen eines Arrays die Größe der Dateibyte[] bytes = new byte[(int) length];
stattdessen könnten wir tunInformationsquelleAutor der Antwort QuakeCore
Rookie, wenn Sie möchten, um eine Datei schreiben zu server-socket -, wie über die Verwendung von fileoutputstream anstelle von dataoutputstream? dataoutputstream ist mehr fit für die Protokoll-level-Lesen-schreiben. es ist nicht sehr vernünftig, Ihren code in bytes Lesen und schreiben. Schleife zum Lesen und schreiben ist notwendig, in java io. und auch, verwenden Sie einen Puffer Weg. Spülen ist notwendig. hier ist ein code-Beispiel: http://www.rgagnon.com/javadetails/java-0542.html
InformationsquelleAutor der Antwort horaceman
Hinzufügen bis auf EJP Antwort; verwenden Sie diese für mehr Flüssigkeit.
Stellen Sie sicher, dass Sie nicht legte seinen code in einer größeren try catch mit mehr code zwischen der .Lesen und der catch-block ist, wird möglicherweise eine Ausnahme und springen den ganzen Weg zu den äußeren catch-block, sicherste Wette ist, um Platz EJPS die while-Schleife wird innerhalb eines try-catch, und dann weiter den code nach, wie:
EDIT: ^Das passiert mir cuz ich nicht erkennen, die Sie benötigen, um socket.shutDownOutput() wenn Sie einen client-zu-server-stream!
Hoffe, dieser Beitrag löst alle Ihre Probleme
InformationsquelleAutor der Antwort Camil Latif