Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Problem mit Bytes auslesen
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
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
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ä
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;
}
}
peschmae
10-03-2004, 20:02
Codetags verwenden :) - ansonsten schliesse ich mich Ceisserer an.
MfG Peschmä
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ä
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
ja ich lern ja erst.... aber danke...
wird schon noch werden :)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.