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.