Ok, ik heb dus een server en een client die met java met elkaar praten, voor zover geen probleem.
De clients rekenen priem getallen uit, sturen ze naar een Bag en de server verzamelt deze getallen uit de Bag.
Hier een paar stukjes code
De client die data verzend naar de "Task Bag"
Stukjes Bag code
Hiermee kunnen clients priem getallen naar de server sturen
Hiermee haalt de server de priem getallen op
Stukjes server code:
De client zend zijn data dus naar de bag, de bag kijkt of PrimeNumberPartDone true is, en copiert de data, als PrimeNumberPartDone false is, stuurt hij false terug en moet de client wachten.
Als de server met de pairIn data ophaald, zet hij hierna de PrimeNumberPartDone weer op true zodat er nieuwe data kan worden verzonden vanuit de clients..
Het probleem is nu dat de server data verliest, als ik later de reeks opgehaalde priem getallen naloop missen er echt een heleboel. Er runnen normaal 10 threads tegelijk, als ik er hier 1 van maak mis ik nog maar een paar stukjes, de clients overspoelen dus de bag/server.
Ik snap _niet_ hoe dit kan, ik zie het niet. Misschien is het iets heeeel stoms ofzo, maar ik wordt er gek van.
Wie weet mijn (stomme) fout te vinden? Bedankt!
De clients rekenen priem getallen uit, sturen ze naar een Bag en de server verzamelt deze getallen uit de Bag.
Hier een paar stukjes code
De client die data verzend naar de "Task Bag"
code:
1
2
3
4
5
| while ( !myServerObject.pairOut("ClientPrimes",NewPrimeNumbers)&&!myServerObject.allWorkDone())
{
Thread.sleep(10);
System.out.println("Sleeping until work can be handed in");
} |
Stukjes Bag code
Hiermee kunnen clients priem getallen naar de server sturen
code:
1
2
3
4
5
6
7
8
9
10
| public synchronized boolean pairOut(String Key, int[] Value)//Clients geven resutlaten terug
{
if (PrimeNumberPartDone&&Key.equals("ClientPrimes"))
{
PrimeNumberPart=Value;
PrimeNumberPartDone=false;
return true;
}
else return false;
} |
Hiermee haalt de server de priem getallen op
code:
1
2
3
4
5
6
7
| public int[] pairIn(String Key)
{
if (Key.equals("Primes")) {
return PrimeNumberPart;
}
else return null;
} |
Stukjes server code:
code:
1
2
| PrimeNumberPart=implementation.pairIn("Primes");
implementation.setPrimeNumberPartDone(true); |
De client zend zijn data dus naar de bag, de bag kijkt of PrimeNumberPartDone true is, en copiert de data, als PrimeNumberPartDone false is, stuurt hij false terug en moet de client wachten.
Als de server met de pairIn data ophaald, zet hij hierna de PrimeNumberPartDone weer op true zodat er nieuwe data kan worden verzonden vanuit de clients..
Het probleem is nu dat de server data verliest, als ik later de reeks opgehaalde priem getallen naloop missen er echt een heleboel. Er runnen normaal 10 threads tegelijk, als ik er hier 1 van maak mis ik nog maar een paar stukjes, de clients overspoelen dus de bag/server.
Ik snap _niet_ hoe dit kan, ik zie het niet. Misschien is het iets heeeel stoms ofzo, maar ik wordt er gek van.
Wie weet mijn (stomme) fout te vinden? Bedankt!