Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Problem mit Bytes auslesen



Tyset
08-03-2004, 15:52
hallo!
Das Programm soll eine anfrage an einen Server schicken und - nicht wie hier - das Ergebniss in einen String schreiben (dieser soll von der Methode zurückgeliefert werden, damit er weiter verarbeitet werden kann.
Außerdem soll die Verbindung nicht geschlossen werden, das Ende der Datei muss an einem "ENDFILE"-Tag erkannt werden.

String s = AnfrageAnServer + "\r\n\r\n";
out.write(s.getBytes());
//Ausgabe lesen und anzeigen
int len;
byte b[] = new byte[100];
while ((len = in.read(b)) != -1) {
System.out.write(b, 0, len);
}

Das bekomme ich aber überhaupt nicht hin, warum weiß ich nicht.
Ich mache vermutlich nur einen kleinen Fehler, aber ich hab jetzt mal den ursprünglichen Quelltext gepostet da es an ihm vermutlich am einfachsten geht.
Ich kann wenn nötig aber auch meinen Code posten, nur tut der eben überhaupt net :)

TIA,
Tyset

Lin728
08-03-2004, 19:25
Hmm, soweit kann ich keinen fehler erkennen. Es ist aber halt nur das Codestück, welches die Daten vom Stream lest. Bist du sicher dass der Socket verbunden ist und außerdem die Streams geöffnet sind.

Das hat mich auch lange gehändelt, es gibt da ne Daumenregel, die eigentlich immer funktioniert.
zuerst getOutputStream und dann erst getInputStream

bischi
09-03-2004, 12:55
Ich hab auch mal was mit Sockets und Clients rumgebastelt - hat leider überhaupt nicht funktioniert. Es lag wohl an den dürftigen Tuts im Internet, man muss sich dafür wohl ein gutes Buch suchen...

Ich hatte folgendes Problem: Ich konnte entweder Senden, oder empfangen, aber nie beides zusammen ;) Macht noch so Sinn.

Ich täte mit


System.out.println("irgendeinstring");

jede Mengen Ausgaben machen, dann kannst du sehen, wo etwas nicht läuft. Anstatt einen String auszugeben kannst du auch mal versuchen, einen Socket oder einen Client auszugeben - das läuft oftmals auch! (Und das wissen viele nicht...)

MfG Bischi

peschmae
09-03-2004, 13:11
Original geschrieben von bischi
Anstatt einen String auszugeben kannst du auch mal versuchen, einen Socket oder einen Client auszugeben

*ROFL* der ist gut. Druck mir mal nen Client :D

MfG Peschmä

Tyset
10-03-2004, 16:45
ok ich hab das Problem jetzt im Griff.
es scheint zumindest so.

Hier der Code damit es andere mal einfacher haben:

String returned = new String();
String s = input;
out.write(s.getBytes());
//Ausgabe lesen und anzeigen
boolean endFound = false;

while(!endFound)
{
byte[] b = new byte[1024];
int len = in.read(b);
String zwischen = new String(b);
returned = returned + zwischen;

zwischen = null; // Variable löschen

if(returned.endsWith("ENDFILE"))
{
endFound = true;
}
}

Lin728
10-03-2004, 19:36
Öhm, naja...

peschmae
10-03-2004, 20:02
Codetags verwenden :) - ansonsten schliesse ich mich Ceisserer an.

MfG Peschmä

Tyset
11-03-2004, 19:20
Original geschrieben von ceisserer
Öhm, naja...
darf ich um Erklärung bitten?
Ist der Code sch*** oder was? Ich bin net besonders gut ich lerne Java erst...

peschmae
11-03-2004, 21:37
String returned = new String();
out.write(input.getBytes());

byte[] b = new byte[1024];

while (!returned.endsWith("ENDFILE")) {
in.read(b)
returned += new String(b);
}


Ungetestet und schnell und so hingeklepft täte imho etwa dasselbe.

Du machst sehr viele Variablen etc. die die Lesbarkeit beeinträchtigen aber nix zur Funktionalität beitragen respektive überflüssig sind.
Das macht die Sache auch für dich schwieriger.

Paradebeispiel:


int len = in.read(b);


len wird zwar erstellt, aber nachher gar nie verwendet :eek:
Genau so überflüssig ist hier "String zwischen;"

MfG Peschmä

anda_skoa
12-03-2004, 10:35
Wenn man einen String zusammenbaut, benutzt man besser einen StringBuffer als Stringkonkatenation, weil das um einiges Performanter ist und keine Stringinstanzen übriglässt, die der GC dann erst wieder freigeben muss.

Ciao,
_

peschmae
12-03-2004, 17:11
Ups. Stimmt natürlich. :)

MfG Peschmä

Lin728
12-03-2004, 19:25
....................

peschmae
13-03-2004, 10:32
ogott

ceisserer benutzt weder Code-Tags noch rückt er den Code ein :eek:

Kein Wunder kriegt er da Probleme mit meiner Klammertechnick :D
Der Unterschied ist aber wirklich null :p

MfG Peschmä

P.S. compiler error: Missing closing bracket on line 7

Lin728
13-03-2004, 10:34
;) ;) ;) :)

Tyset
16-03-2004, 13:59
ja ich lern ja erst.... aber danke...
wird schon noch werden :)