Pytanie o komunikacje na socketach - zapisywanie do soketa

0

Hej mam takie pytanie, mam klienta i pobieram OutputStream, zapisuje do niego jakies tam bajty i robie flush tak na wszelki wypadek
po stronie servera mam taki kod ze pobieram Socket metoda accept() ServerSocketa oraz pobieram jego InputStream
tam mam taki kod:

ByteArrayOutputStream bout = new ByteArrayOutputStream(1024);
byte[] buff = new byte[512];
int bytesRead;
while ((bytesRead = in.read(buff)) != -1) {
    bout.write(buff, 0, bytesRead);
}
buff = bout.toByteArray();

i moje pytanie polega na tym: czy robie to poprawnie :-)
oraz skad metoda read() wie ze jest koniec strumienia i ze ma zwrocic -1 skoro po stronie klienta nie moge wywolac metody close na OutputStream gdyz wg API to zakmnie caly Socket i nic wiecej nie moge zrobic?
Prosze o pomoc

0

No i wlasnie, zdebugowalem server i on wczytuje np 493 bajty w pierwszym obiegu petli, i nastepnie blokuje sie na nastepnym poniewaz czeka na koniec strumienia?

0

mialem podobny problem
proponuje ustalic sobie protokol tak, aby najpierw wysylal liczbe bajtow, potem tworz tablice i zczytuj dokladnie taka sama ilosc. Niestety metoda read powinna zwracac ilosc przeczytanych bajtow, lecz jesli nie wypelni tablicy to sie blokuje.
A dlaczego nie chcesz uzywac ObjectInput/OutputStreamow?
i taka mala rada:
socket.getInputStream();
i
socket.getOutputStream();
tworz w odwrotnej kolejnosci na serwerze i klientach (bo lubi wisiec) :)

pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1