Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Servlet Byte Data

2 views
Skip to first unread message

noms

unread,
Nov 28, 2007, 6:00:01 AM11/28/07
to
Witam :)

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

Jaroslaw Szczepankiewicz

unread,
Nov 28, 2007, 6:13:26 AM11/28/07
to
noms pisze:

> Witam :)
>
> 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
>

nie do konca rozumiem calosci ale zasymulowac dzialanie browsera mozesz
za pomoca httpclient'a, moze opisz szerzej problem

noms

unread,
Nov 28, 2007, 9:05:28 AM11/28/07
to
Sprawa wyglada tak ze potrzebuje jakis sposob za pomoca ktorego bede
mogl zasymulowac wysylanie strumienia w postaci binarnej. Koncowym
celem dzialania servletu jest parsowanie danych z urzadzenia GPS,
ktore wysyla dane w postaci strumienia bajtow za pomoca requestu POST.
Narazie jedynym rozwiazaniem na jakie wpadlem to napisanie aplikacji,
ktora bedzie dane przerabiala na bajty i wysylala do servletu POST-em.
Szukam innego rozwiazania bo nie specjalnie mam czas zeby pisac
jeszcze dodatkowe aplikacje do testowania wlasciwego oprogramowania.

noms

unread,
Nov 28, 2007, 9:38:34 AM11/28/07
to
Napisalem na szybko programik co robi POST-a. Odczytuje dane z pliku
binarnego i wysyła je do servleta jednak dane nie dochodzą.

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 ?

noms

unread,
Nov 28, 2007, 10:14:20 AM11/28/07
to
Prztestowalem i wyglada na to ze wina jest po stronie serwleta

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 ?

Jaroslaw Szczepankiewicz

unread,
Nov 28, 2007, 10:14:30 AM11/28/07
to
noms pisze:

> Napisalem na szybko programik co robi POST-a. Odczytuje dane z pliku
> binarnego i wysyła je do servleta jednak dane nie dochodzą.
nie wnikam w Twoj kod ale zakladajac ze urzadzenie wysyla standardowego
POST'a to na pewno zaprojektowano to z mysla o tym zeby ulatwic
parsowanie danych z urzadzenia a wiec jest domniemanie ze urzadzenie
wysyla dane zgodnie z formatem POST http, ja bym po prostu uzyl
HttpClient ma on metode o ile pamietam doPost, znajac format wysylanych
danych z urzadzenia jestes w stanie zasymulowac wszystko, nie okresliles
co znacza dane binarne, istnieje format http i w nim sa zakodowane
wszelkie dane, zwroc tez uwage ze istnieje tez odmiana POST multipart
form data (obslugiwane przez HttpClient) i sluzy do przesylania plikow
jako czesci requestu, na twoim miejscu zamiast pisac wlasne
niskopiozomowe operacje po prostu utworzylbym instalcje httpclient i
slal dane z uzyciem wysokopoziomowych metod = oszczednosc twojego czasu

Jaroslaw Szczepankiewicz

unread,
Nov 28, 2007, 10:16:52 AM11/28/07
to

> 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

noms

unread,
Nov 28, 2007, 10:53:37 AM11/28/07
to
Dane nie sa niestety wysylane zgodnie z formatem. Jedynie naglowek
http post wystepuje przed strumieniem danych. Z programikiem juz sobie
poradzilem. Do testu uzywalem OutputStreamWriter nie przystosowany do
wysylania golych danych i to powodowalo blad po odebraniu w servlecie.
Dane z urzadzonka wysylane sa z pomocą IMletu, dlatego calosc wyglada
troche dziwnie:

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.

Damian

unread,
Nov 29, 2007, 5:06:33 AM11/29/07
to
noms <pank...@gmail.com> wrote in news:41ead900-8bf2-4422-9efc-
95d79c...@o42g2000hsc.googlegroups.com:

> 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

0 new messages