Autor Beitrag
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 25.02.10 11:52 
Hallo,

ich habe folgenden Anwendungsfall: Ich will eine Datei von einer Anwendung zur Anderen übertragen. Auf der einen Seite habe ich einen Java Server und auf der anderen einen .NET Client. Theoretisch funktioniert es... praktisch leider nicht.

Und zwar habe ich folgendes:

Sender (.NET):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
            byte[] fileContent = File.ReadAllBytes(file.FullName);

            SendMsg("LOAD " + file.Name + " " + fileContent.Length);
            
            _writer.Write(fileContent);
            _writer.Flush();


Empfänger (Java):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  String[] args = _reader.readLine().split(" ", 2);
  String[] loadArgs = args[1].split(" ");
  String filename = loadArgs[0];
  int size = Integer.parseInt(loadArgs[1]);

  File f = new File(filename);
  byte[] fileData = new byte[size];
  _client.getInputStream().read(fileData);

  FileOutputStream fos = new FileOutputStream(f);
  fos.write(fileData);
  fos.flush();
  fos.close();

Anmerkung zum Ablauf:
Ich sende dem Empfänger den Befehl "LOAD <filename> <filesize>NEWLINE";
Daraufhin ließt er filesize bytes vom Input-Stream und speichert diese in einer Datei.

Das funktioniert (Größe etc. passt anscheinend), allerdings ist die erzeugte Datei (Binärformat) unterschiedlich zu der versendeten (sagt zum Beispiel ExamDiff). Leider weiß ich nicht warum. Ich dachte wenn ich die Datei byte-weiße übertrage ist das Format Wurst?

Ich hoffe es hat jemand eine Anregung wo der Hacken liegen könnte (Betriebssystem ist das selbe).

Danke & Gruß
Daniel
danielf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 25.02.10 13:38 
Lösung:

Okay, ich hab nicht richtig aufgepasst. Meine globales _writer-Objekt (Type PrintWriter), nimmt gar kein byte[], sondern nur einen String. Allerdings hat der Compilier mich nicht gewarnt oder ähnliches sondern den byte[] einfach in einen String (mit toString()) umgewandelt. Wenn ich nun keine Binary, sondern ein Textfile übertrage, konnte ich darin sehen System.byte[] ...

Mit dem ursprünglichen Stream der Socket-Klasse (GetStream()) funktioniert das Schreiben (Write).