Witam
Mam problem z efektywnością mojego programu. Ogólny zarys funkcjonalności programu jest taki, że klient żąda od serwera żeby ten wykonał jakieś zadanie, a serwer po wykonaniu zadania przesyła wynik do klienta. Poniżej sa kody dla klienta i serwera, w których tkwi problem (tak sądzę). Chodzi o to, że jeżeli w liście wynikowej, której elementy ma przesłać serwer jest więcej elementów niż 8 to klient ich nie odbiera, mimo że serwer przesyła je do strumienia.
Nie wiem dokładnie dlaczego klient się blokuje (Serwer działa nadal). W kodzie serwera są zakomentowane instrukcje, jeżeli je odkomentuje to załatwiają problem tylko częściowo - klient nadąża z pobieraniem wyniku, ale usypianie znacznie wydłuża czas w porównaniu do czasu w jakim serwer przesyła wynik. Ustawienie mniejszego czasu też powoduje blokadę.
Jeżeli ktoś ma jakiś pomysł na rozwiązanie tego problemu, to bedę wdzięczny za pomoc
serwer - przesyłanie wyniku do klienta
...
ObjectOutputStream outStream = new ObjectOutputStream(clientSocket.getOutputStream());
Result result;
//przesyłanie po kolei wyników zawartych w liście
for (int i = 0; i < resultArray.size(); i++)
{
outStream.writeObject(resultArray.get(i));
//if (i % 8 == 0)
// Thread.sleep(200);
}
result = new Result(-1, "end");
outStream.writeObject(result);
...
klient - odbiór wyniku
...
ObjectInputStream inStream = new ObjectInputStream(socket.getInputStream());
boolean continueReading = true;
while (continueReading)
{
//odebranie kolejnej porcji wyniku
Result result = (Result) inStream.readObject();
//koniec wysyłania określony jest przez odebranie spreparowanego wyniku
//w którym wartość pola określającego numer znaku jest równa -1
if(result._absolutePosition == -1)
continueReading = false;
//jeżeli odebrano zwykły wynik dodawany jest on do tablicy wynikowej
else
resultArray.add(result);
}
...