Jarosław Rybski

Jarosław Rybski Programista
C/C++/Python

Temat: Socket, pobranie kilku wierszy

Witam,

Mam taki fragment kodu appletu.


// gdzieś w programie
for(;;)
{
String s = recvData();
if (s.charAt(0) == 'a') funa(s);
if (s.charAt(0) == 'b') funb(s);
//itd.
}

// a gdzies dalej czytanie z gniazdka sieciowego
public String recvData(){
BufferedReader in = null;
String odp;
try {
in = new BufferedReader(new InputStreamReader(mySock.getInputStream()));
odp = in.readLine();
}
catch(Exception e) {
msgForCoder = e.toString();
return "zERROR";
}
return odp;
}

Powyższy fragment tyczy się aplikacji klienckiej.

Gdy serwer wysyła bufor zakończony znakiem nowej linii to wszystko jest ok - in.readLine() załatwia sprawę, ale gdy tylko serwer wysyła kilka linii w jednym buforze to już jest problem. Metoda recvData() zwraca string, sprawdzam pierwsze dwa znaki co w nich siedzi i dalej kieruję do odpowiednich funkcji. Gdy serwer przyśle kilka linii naraz to powyższa metoda zwróci pierwszą linie, natomiast reszta zostanie stracona. Przy następnym wywołaniu funkcji recdData() nie ma już poprzednio nie odczytanych linii.

Macie jakieś sugestie co z tym można zrobić.
Dodam że przy każdym wywołaniu recvData() chciałbym otrzymywać dokładnie jedną linię.
Pozdrawiam.

konto usunięte

Temat: Socket, pobranie kilku wierszy

...

StringBuilder sb = new StringBuilder();
String odp = null;
while ( (odp = in.readLine())!=null) {
sb.append(odp);
}

return sb.toString()

?
Jarosław Rybski

Jarosław Rybski Programista
C/C++/Python

Temat: Socket, pobranie kilku wierszy

Właściwie wydawać by się mogło to dobrym rozwiązaniem, ale nie jest. Nigdy nie wiem ile wierszy wysyła serwer. Zazwyczaj jest jeden ale czasem jest kilka. Błędem w tym rozwiązaniu jest to że zwrócę string wtedy gdy serwer się rozłączy. Obecnie będzie cały czas siedział w while.

konto usunięte

Temat: Socket, pobranie kilku wierszy

Metoda ready() na Readerze ?Pawel Dolega edytował(a) ten post dnia 25.04.10 o godzinie 14:36
Jarosław Rybski

Jarosław Rybski Programista
C/C++/Python

Temat: Socket, pobranie kilku wierszy

O to mi chodziło -
metoda ready() na Readerze oraz StringBuilder.
Wprawdzie dochodzą drobne modyfikacje w pętli for(;;) ale to chyba najprostszy sposób, a co ważne że działa.

Pozdrawiam.

Następna dyskusja:

java.net - pobranie wynikow...




Wyślij zaproszenie do