Problem bei Übertragung von Binärdateien

Status
Nicht offen für weitere Antworten.

jeroen

Mitglied
hi,

ich hänge schon seit einiger Zeit an folgendem Problem:

und zwar will ich eine Binär datei vom einem Server auf einem Android Client übertragen.

Hier ist zur erst mal mein Code:
Server:
Code:
import java.io.*;
import java.net.*;



public class ServerTest 
{
	public static void main(String[] args) throws CanotConnectToServer, IOException
	{
		
		
		if ( args.length != 2)
		{
			System.err.println("usage: ClientTest <port> <file>");
			System.exit(-1);
		}
		
		ServerSocket server = new ServerSocket( new Integer(args[0]) );
		
		while( true )
		{
			Socket socket = server.accept();		
			
			System.out.println("Eingehende Verbindung von " + socket.getInetAddress());
			
			OutputStream out = socket.getOutputStream();
			InputStream fileIn = new FileInputStream( args[1] );
			 
			byte[] buffer = new byte[1024];
			while (fileIn.available() > 0) {
			    out.write(buffer, 0, fileIn.read(buffer));
			}
			 
			fileIn.close();
			socket.close();
		}		
		
	}
}

Hier der Code der die Datenempfängt (nur ausschnitt):
Code:
InetSocketAddress ServerAddress = new InetSocketAddress( "192.168.1.31", 2001 );
Socket s = new Socket();

try 
{
s.connect( ServerAddress , 1000);
	
if ( s.isConnected() )
{				
	InputStream in = s.getInputStream();
				
	byte[] buffer = new byte[ 2500 * 3 + 1 ];
	int bytesRead = 1;
				
	bytesRead = in.read(buffer);			
			
	for(i=0; i<buffer.length; i++)
	{
		Log.e(TAG, i+": " + new Byte(buffer[i]).intValue());
	}
				
	if ( bytesRead != buffer.length )
	{
	Log.e(TAG, "canot read");
	}

Die Datei die ich senden will:
Code:
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff fa ff ff ed ff ff f1 ff ff ff ff ff ff fd ff ff fc ff ff fd ff ff ff ff f8 ff ff f0 fc fc f6 ff ff ff ff ff ff fa fb ff fc fd ff fc fd f6 fb fa f6 fc fb fd ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

Der empfange Binäre:
Code:
E/UC4:    (  581): 0: -1

E/UC4:    (  581): 1: -1

E/UC4:    (  581): 2: -1

E/UC4:    (  581): 3: -1

E/UC4:    (  581): 4: -1

E/UC4:    (  581): 5: -1

E/UC4:    (  581): 6: -1

E/UC4:    (  581): 7: -1

E/UC4:    (  581): 8: -1

E/UC4:    (  581): 9: -1

E/UC4:    (  581): 10: -1

E/UC4:    (  581): 11: -1

E/UC4:    (  581): 12: -1

E/UC4:    (  581): 13: -1

E/UC4:    (  581): 14: -1

E/UC4:    (  581): 15: -1

E/UC4:    (  581): 16: -1

E/UC4:    (  581): 17: -1

E/UC4:    (  581): 18: -1

E/UC4:    (  581): 19: -1

E/UC4:    (  581): 20: -1

E/UC4:    (  581): 21: -1

E/UC4:    (  581): 22: -1

E/UC4:    (  581): 23: -1

E/UC4:    (  581): 24: -1

E/UC4:    (  581): 25: -1

E/UC4:    (  581): 26: -1

E/UC4:    (  581): 27: -1

E/UC4:    (  581): 28: -1

E/UC4:    (  581): 29: -1

E/UC4:    (  581): 30: -1

E/UC4:    (  581): 31: -1

E/UC4:    (  581): 32: -1

E/UC4:    (  581): 33: -1

E/UC4:    (  581): 34: -1

E/UC4:    (  581): 35: -1

E/UC4:    (  581): 36: -1

E/UC4:    (  581): 37: -1

E/UC4:    (  581): 38: -1

E/UC4:    (  581): 39: -1

E/UC4:    (  581): 40: -1

E/UC4:    (  581): 41: -1

E/UC4:    (  581): 42: -1

E/UC4:    (  581): 43: -1

E/UC4:    (  581): 44: -1

E/UC4:    (  581): 45: -8

E/UC4:    (  581): 46: -1

E/UC4:    (  581): 47: -1

E/UC4:    (  581): 48: -19

E/UC4:    (  581): 49: -1

E/UC4:    (  581): 50: -1

E/UC4:    (  581): 51: -17

E/UC4:    (  581): 52: -1

E/UC4:    (  581): 53: -1

E/UC4:    (  581): 54: -1

E/UC4:    (  581): 55: -1

E/UC4:    (  581): 56: -1

E/UC4:    (  581): 57: -1

E/UC4:    (  581): 58: -3

E/UC4:    (  581): 59: -1

E/UC4:    (  581): 60: -1

E/UC4:    (  581): 61: -4

E/UC4:    (  581): 62: -1

E/UC4:    (  581): 63: -1

E/UC4:    (  581): 64: -3

E/UC4:    (  581): 65: -1

E/UC4:    (  581): 66: -1

E/UC4:    (  581): 67: -1

E/UC4:    (  581): 68: -1

E/UC4:    (  581): 69: -8

E/UC4:    (  581): 70: -1

E/UC4:    (  581): 71: -1

E/UC4:    (  581): 72: -19

E/UC4:    (  581): 73: -6

E/UC4:    (  581): 74: -8

E/UC4:    (  581): 75: -12

E/UC4:    (  581): 76: -1

E/UC4:    (  581): 77: -3

E/UC4:    (  581): 78: -1

E/UC4:    (  581): 79: -2

E/UC4:    (  581): 80: -2

E/UC4:    (  581): 81: -1

E/UC4:    (  581): 82: -5

E/UC4:    (  581): 83: -4

E/UC4:    (  581): 84: -1

E/UC4:    (  581): 85: -6

E/UC4:    (  581): 86: -4

E/UC4:    (  581): 87: -1

E/UC4:    (  581): 88: -4

E/UC4:    (  581): 89: -3

E/UC4:    (  581): 90: -7

E/UC4:    (  581): 91: -2

E/UC4:    (  581): 92: -3

E/UC4:    (  581): 93: -9

E/UC4:    (  581): 94: -3

E/UC4:    (  581): 95: -4

E/UC4:    (  581): 96: -3

E/UC4:    (  581): 97: -1

E/UC4:    (  581): 98: -1

E/UC4:    (  581): 99: -1

Das komische das ein Teil der Übertragung stimmt, aber teile auch nicht.
Könnte bitte jemand von euch über den Code mal drüber gucken.

jeroen
 

jeroen

Mitglied
hi,

ich hab mal den client code als normales Java Program formuliert.
der effekt ist der gleiche, aber leichter zu testen.

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

public class ClientTest 
{
	static SocketAddress ServerAddress; 

	public static void main(String[] args) throws CanotConnectToServer, IOException
	{
		
		InetSocketAddress ServerAddress = new InetSocketAddress( "192.168.1.31", 2001 );
		Socket s = new Socket();
		int i,j;

		try 
		{
			s.connect( ServerAddress , 1000);
	
			if ( s.isConnected() )
			{				
				InputStream in = s.getInputStream();
			
				
				byte[] buffer = new byte[ 7501 ];
				int bytesRead = 1;
				
				bytesRead = in.read(buffer);			
			
				for(i=0; i<buffer.length; i++)
				{
					System.out.println(i+": " + new Byte(buffer[i]).intValue());
				}
				
				if ( bytesRead != buffer.length )
				{
					System.out.println("canot read");
				}
				
				s.close();
			}
		}
		catch (Exception e) 
		{
			System.err.println(e);
		}

	}
	
	
}


jeroen
 

Ebenius

Top Contributor
:rtfm: InputStream.read(byte[]):
API-Doc hat gesagt.:
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.

If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.

The first byte read is stored into element b[0], the next one into b[1], and so on. The number of bytes read is, at most, equal to the length of b. Let k be the number of bytes actually read; these bytes will be stored in elements b[0] through b[k-1], leaving elements b[k] through b[b.length-1] unaffected.
:rtfm: InputStream.available():
API-Doc hat gesagt.:
Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. The next invocation might be the same thread or another thread. A single read or skip of this many bytes will not block, but may read or skip fewer bytes.

Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not. It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream.
Richtig liest man also vom Strom mit: [HIGHLIGHT="Java"]byte[] buffer = new byte[7501];
int bytesRead;
int totalBytesRead = 0;
while ((bytesRead = in.read(buffer)) != -1) {
for (int i = 0; i < bytesRead; i++) {
System.out.printf("%5d: Byte (Hex) %2x", totalBytesRead + i, buffer);
}
totalBytesRead += bytesRead;
}[/HIGHLIGHT]
Variablen deklariert man in Java dort wo man sie braucht; nicht irgendwo vorher.

Ebenius
 

jeroen

Mitglied
hi,

ich hatte das problem schon vorher gelöst in dem ich datei komplett in den buffer eingelese habe. und dann mit einem schlag auf den socket geschrieben habe.

jetzt hab ich aber ein anders problem:
mach mal wird das bild das ich übertrag nur zur hälft übertragen,
mach mal 3/4 oder 1/4. das die daten nicht komplet verfügbar sind kann ich feststellen, aber warum ist das so ?
bitte sagen wenn ich ihr den code braucht.

jeroen
 

Ebenius

Top Contributor
ich hatte das problem schon vorher gelöst in dem ich datei komplett in den buffer eingelese habe. und dann mit einem schlag auf den socket geschrieben habe.
Das löst das Problem nicht wirklich, oder ich habe Dich falsch verstanden. available() gibt nun mal nur die Anzahl der Bytes die bereits in den Puffer des Stroms gelesen wurden und deshalb ohne zu Blockieren vom Strom gelesen werden können. Mach's so, wie ich oben geschrieben habe!

jetzt hab ich aber ein anders problem:
mach mal wird das bild das ich übertrag nur zur hälft übertragen,
mach mal 3/4 oder 1/4. das die daten nicht komplet verfügbar sind kann ich feststellen, aber warum ist das so ?
bitte sagen wenn ich ihr den code braucht.
Sicher, dass es ein anderes Problem ist und nicht das selbe? Code wäre hilfreich, ja.

PS: Ich kaufe ein 'n'.

Ebenius
 

jeroen

Mitglied
hi,

ich hab deine code mal getest und jetzt werden mehr daten gesendet als die datei groß ist.

server:
[HIGHLIGHT="Java"]OutputStream out; // ist der socket
int bytesRead;
byte[] buffer = new byte[100];

InputStream fileIn = new FileInputStream( "H:\\" + filename );

while ((bytesRead = fileIn.read(buffer)) != -1)
{
for (int i = 0; i < bytesRead; i++)
{
out.write(buffer);
}
}

fileIn.close();[/HIGHLIGHT]

client:
[HIGHLIGHT="Java"]InetSocketAddress ServerAddress = new InetSocketAddress( "192.168.1.31", 2001 );
Socket s = new Socket();
int i,j;

try
{
s.connect( ServerAddress , 1000);

if ( s.isConnected() )
{
InputStream in = s.getInputStream();

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

out.write( "GET bla" );
out.newLine();
out.flush();


byte[] buffer = new byte[100];

int bytesRead;
int totalBytesRead = 0;

while ((bytesRead = in.read(buffer)) != -1)
{
for (i = 0; i < bytesRead; i++)
{
System.out.printf("%5d: Byte (Hex) %2x\n", totalBytesRead + i, buffer);
}

totalBytesRead += bytesRead;
}

if ( bytesRead != buffer.length )
{
System.out.println("canot read");
}

s.close();
}
}
catch (Exception e)
{
System.err.println(e);
}[/HIGHLIGHT]

jeroen
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
*hust*

In Deinem letzten Beitrag im ersten Code-Beispiel: Wenn Du nur eine Anzahl von bytesRead Bytes liest, solltest Du auch nicht mehr verschicken, oder? Zeile 11 ändern in [HIGHLIGHT="Java"]out.write(buffer, 0, bytesRead);[/HIGHLIGHT]
Stimmt's oder hab ich Recht?

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
E Problem: netbeans 6.5 und webanwendung Netzwerkprogrammierung 6

Ähnliche Java Themen


Oben