Mam nastepujacy problem. Do servleta wysylane sa dane w postaci
strumienia bajtow (POST). Moim zadaniem jest odebranie tych danych i
odpowiednie sparsowanie. W jaki sposob moge zasymulowac wyslanie
takiego rodzaju danych z poziomu formularza www i jak odczytac wartosc
zapisana np. na 2 bajtach
request.getInputeStream().read()
zwraca jedynie wartosc int jednego bajta a co zrobic jesli ta wartosc
jest zapisana na wiekszej ilosci bajtow
int jeden = request.getInputeStream().read();
int drugi = request.getInputeStream().read();
int wynik = jeden<<drugi ?
Pozdrawiam
nie do konca rozumiem calosci ale zasymulowac dzialanie browsera mozesz
za pomoca httpclient'a, moze opisz szerzej problem
import java.nio.*;
import java.net.*;
import java.io.*;
public class test{
public static void main(String args[]){
try {
FileInputStream fi = new FileInputStream("test.hex");
DataInputStream di = new DataInputStream(fi);
// Construct data
int t = di.read();
System.out.println("Dane z pliku : "+t+"\n\n");
// Send data
URL url = new URL("http://localhost:8080/JoC/radarEcho?
IMEI=236842");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new
OutputStreamWriter(conn.getOutputStream());
wr.write(t);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
rd.close();
} catch (Exception e) {
}
}
}
------------------------------------------------------
Plik test.hex zawiera jedynie jedną wartość 0xFF (255). Po
uruchomieniu programu
Dane z pliku : 255 (int)
Odpowiedz:
time = ?
-------------------------------------------------------
servlet:
...
int time = req.getInputStream().read();
res.getOutputStream("Odpowiedz : \ntime = "+time);
...
-------------------------------------------------------
Jesli wysle dane tekstowe typu string lub char servlet odpowiada
prawidlowo (oczywiscie jest to wartos int odpowiadajaca danemu
znakowi). Wartosci binarne nie dochodza ... W czym moze byc problem ?
Jesli wysle 0x0F , servlet otrzyma 15 i odpowie prawidlowo
Jesli wysle 0x1F lub 0xFF , otrzymuje calkiem dziwne wyniki (31 i 68)
wygląda na to że problem jest tutaj
int time = req.getInputStream().read();
ale dlaczego tak sie dzieje ?
przeciez serwlet odbiera format http, a pobieznie patrzac na twoj kod
wysylasz po prostu strumien binary, dane z pliku sa zle interpetowane,
serwlet to nie serwer echa (binarnego w dodatku) pamietaj o tym
http://../servlet?id=4445563 + dane POST w formacie 'raw data'
Jesli by to zalezalo ode mnie to oczywiscie ze wolal bym zwykly format
POST. Parsowanie czegos takiego nie bylo by zadnym problemem, ale
niestety jest to niezalezne ode mnie :)
Dzięki za pomoc.
> Mam nastepujacy problem. Do servleta wysylane sa dane w postaci
> strumienia bajtow (POST). Moim zadaniem jest odebranie tych danych i
> odpowiednie sparsowanie.
> jak odczytac wartosc zapisana np. na 2 bajtach
>
> request.getInputeStream().read()
>
> zwraca jedynie wartosc int jednego bajta a co zrobic jesli ta wartosc
> jest zapisana na wiekszej ilosci bajtow
InputStream.read(byte b[])
A potem z b[0] i b[1] rób co chcesz.
P.S.
Jak masz dane binarne to nie używaj Readerów.
--
Damian