Outputstream Byte-Array senden

TX

Mitglied
Hallo, probiere gerade etwas mit der IO rum.

Client:
- Datei einlesen
- Über Socket senden

Server:
- Über Socket empfangen
- Datei schreiben

Es werden meistens 18Kb oder so übertragen dann
stürzt das Programm mit folgender Meldung ab.

-- Datei gelesen --
-- Datei empfangen --
java.net.SocketException: Software caused connection abort: socket write error
-- Thread Client End --
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at lesen.ImageReaderClient.readAndSendFile(ImageReaderClient.java:33)
at lesen.TestFrame$2.run(TestFrame.java:23)
-- Datei geschrieben --
-- Thread Server End --


Ist das Byte Array zuviel auf einmal?
Oder ist meine TestFrame-Klasse mit den Threads unpassend gebaut?
Oder macht localhost Probleme?

TestFrame:
Java:
package lesen;

import java.util.concurrent.TimeUnit;

public class TestFrame {

	public static void main(String[] args) {
		
		Thread server = new Thread(){
			@Override
			public void run() {
				ImageWriterServer iws = new ImageWriterServer();
				iws.receiveAndWriteFile();
				System.out.println("-- Thread Server End --");
			}
			
		};
		
		Thread client = new Thread(){
			@Override
			public void run() {
				ImageReaderClient irc = new ImageReaderClient();
				irc.readAndSendFile();
				System.out.println("-- Thread Client End --");
			}
			
		};
		
		try {
			
			server.start();
			TimeUnit.SECONDS.sleep(1);
			client.start();
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

Client:
Java:
package lesen;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class ImageReaderClient {
	
	private final static String READFILE= "C:/image.jpg";
	private FileInputStream fis;
	private byte arrayForFile[];
	private Socket csocket;
	
	
	public ImageReaderClient() {
		
		arrayForFile = new byte[515000];
	}
	
	public void readAndSendFile(){
		try {
			fis = new FileInputStream(READFILE);
			int lenght;
			lenght = fis.read(arrayForFile);
			fis.close();
			System.out.println("-- Datei gelesen --");
			
			csocket = new Socket( "localhost", 5000 );
			OutputStream os = csocket.getOutputStream();
			
			os.write(arrayForFile, 0, lenght);
			System.out.println("-- Datei gesendet --");
			
			os.close();
			csocket.close();
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
			
		} catch (IOException e) {
	
			e.printStackTrace();
			
		}
		
	}
	
}

Server:
Java:
package lesen;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ImageWriterServer {
	private final static String SAVEFILE= "C:/image2.jpg";
	private FileOutputStream fos;
	private byte arrayForFile[];
	private ServerSocket serverSocket;
	private Socket ssocket;
	
	
	public ImageWriterServer() {
		
		arrayForFile = new byte[515000];
	}
	
	public void receiveAndWriteFile(){
		try {
			int length;
			
			serverSocket = new ServerSocket( 5000 );
			ssocket = serverSocket.accept();
			
			InputStream is = ssocket.getInputStream();
			length = is.read(arrayForFile);
			System.out.println("-- Datei empfangen --");
			
			is.close();
			ssocket.close();
			
			fos = new FileOutputStream(SAVEFILE);
			fos.write(arrayForFile, 0, length);
			fos.close();
			
			System.out.println("-- Datei geschrieben --");
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
			
		} catch (IOException e) {
	
			e.printStackTrace();
			
		}
		
	}
}
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Hm. Bei InputStream#read(byte[]) wird nicht notwendigerweise so viel gelesen, wie in den Array passt. Es kann sein, dass bei
Java:
read = is.read(arrayForFile);
System.out.println("Gelesen: "+read);
erstmal "0" ausgegeben wird, oder 153, oder so. Meinem Halbwissen nach muss das in einer Schleife stehen, wie grob diese Struktur hat
Java:
InputStream is = ...
OutputStream os = ..
byte buffer[] = new byte[8192];
while (true)
{
    int read = is.read(buffer);
    if (read == -1) break;
    os.write(buffer, 0, read);
}
 

TX

Mitglied
Jo, du hattest recht.
Habe das erstmal so gelöst, auch wenn ich das noch nicht so elegant finde.

Java:
package lesen;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ImageWriterServer {
	private final static String SAVEFILE= "C:/image2.jpg";
	private FileOutputStream fos;
	private byte arrayForFile[];
	private ServerSocket serverSocket;
	private Socket ssocket;
	
	
	public ImageWriterServer() {
		
		arrayForFile = new byte[515000];
	}
	
	public void receiveAndWriteFile(){
		try {
			int length = 0;
			int pufferPointer = 0;
			byte puffer[] = new byte[50000];
			
			serverSocket = new ServerSocket( 5000 );
			ssocket = serverSocket.accept();
			
			InputStream is = ssocket.getInputStream();
			while(true){
				length = is.read(puffer);
				if(length==-1){
					break;
				}
				System.out.println("-- Inputstream -- " + length);
				
				for(int i = 0; i < length; i++){
					arrayForFile[pufferPointer + i] = puffer[i];
				}
				pufferPointer += length;
			}
			System.out.println("-- Daten empfangen --");
			
			
			is.close();
			ssocket.close();
			
			fos = new FileOutputStream(SAVEFILE);
			fos.write(arrayForFile, 0, pufferPointer);
			fos.close();
			
			System.out.println("-- Datei geschrieben --");
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
			
		} catch (IOException e) {
	
			e.printStackTrace();
			
		}
		
	}
}

Außerdem sollte man noch im Testframe mit
client.join();
server.join();
darauf warten, bis sich die Threads beenden.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T OutputStream kommt nicht an Netzwerkprogrammierung 18
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
S FTP OutputStream Timed out Netzwerkprogrammierung 2
D Socket Socket OutputStream leeren? Netzwerkprogrammierung 3
Seikuassi Socket CipherInput/OutputStream empfängt nichts Netzwerkprogrammierung 23
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
E Socket Outputstream - chunks groeße bestimmen. Netzwerkprogrammierung 3
T Socket ObjectIn/OutputStream Netzwerkprogrammierung 3
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
M Socket InputStream sendet ausgaben von OutputStream zurück Netzwerkprogrammierung 2
D Inputstream to Outputstream Netzwerkprogrammierung 3
H Input-/OutputStream Frage Netzwerkprogrammierung 6
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
P Probleme mit OutputStream Netzwerkprogrammierung 7
M Verbindung über Proxy// Problem mit Outputstream bei URLConn Netzwerkprogrammierung 5
PAX Outputstream von anderem Thread verwenden lassen Netzwerkprogrammierung 5
T Filter für Input UND OutputStream Netzwerkprogrammierung 4
Y Inhalt aus Textfield in OutputStream packen Netzwerkprogrammierung 4
bummerland Cookies über OutputStream senden Netzwerkprogrammierung 2
x46 Byte-Array per for-Schleife schicken Netzwerkprogrammierung 1
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
D Socket Gute Idee?: File als byte[] per ObjectIOStream übertragen Netzwerkprogrammierung 3
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
C Byte Stream dekodieren Netzwerkprogrammierung 7
W Socket Byte Array senden Netzwerkprogrammierung 2
M Byte Array kommt nicht an Netzwerkprogrammierung 0
N Paket-Analysieren Byte-Streams Netzwerkprogrammierung 12
K Socket byte Schleife beendet nicht Netzwerkprogrammierung 9
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
B Socket Byte-array Komprimieren Netzwerkprogrammierung 3
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
J byte[] auf Stream schreiben Netzwerkprogrammierung 2
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
E RTP Packet lesen - Byte Problem 0xFFFFFF80 statt 0x80 Netzwerkprogrammierung 7
V Zuweisen einer InetAddress mit einem byte Netzwerkprogrammierung 5
D Byte-Zähler des Netzwerkinterface auslesen Netzwerkprogrammierung 2
T Kommunikation auf Byte-Ebene zw. C und Java via Socket Netzwerkprogrammierung 12
B HEX String zu einem Byte Array ? *verzweiflung* :( Netzwerkprogrammierung 16
H Byte-Codierung bei Socket-Verbindung ändern Netzwerkprogrammierung 8
8 Socket Streams nur mit Byte? Netzwerkprogrammierung 2
G binärwert aus 2 byte auslesen Netzwerkprogrammierung 7
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
D Daten per Server- Client nur als byte verschicken? Netzwerkprogrammierung 3
O JAVA hängt bei Dateikopie über LAN ein Byte an!!! ARGH Netzwerkprogrammierung 3
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
A Server Antwort enthält JSON Objekt/Array Netzwerkprogrammierung 8
precoc String Array versenden Netzwerkprogrammierung 7
U ein ganzes Array effizient übermitteln Netzwerkprogrammierung 6
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
J Array oder Object über Sockets Netzwerkprogrammierung 8
O Über Socket Array versenden Netzwerkprogrammierung 5
A array übers netzwerk (anfänger) Netzwerkprogrammierung 8
S Socket-Array vs. MulticastSocket Netzwerkprogrammierung 2
P Array per Socketverbindung versenden Netzwerkprogrammierung 2
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
J Prblem, wenn im verschickten Objekt ein Array ist Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben