Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java - Problem prilikom klijent server komunikacije

[es] :: Java :: Java - Problem prilikom klijent server komunikacije

[ Pregleda: 1234 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan34

Član broj: 326385
Poruke: 9
31.223.129.*



Profil

icon Java - Problem prilikom klijent server komunikacije10.06.2016. u 20:00 - pre 50 meseci
Pozdrav. Jedan dio koda mi ne radi. Aplikacija je za rad sa knjigama. Prilikom iznajmljivanja knjige, kada je uspjesno iznajmim ( prilikom setovanja akcije za dugme iznajmi, povezujem se na server, ako knjiga sa tim imenom postoji, server vraca OK i na ekranu iskace poruka sa iznajmljivanjem), tada se ta knjiga zakljucava na random vrijeme izmedju 20 i 50 sekundi. Kada knjiga opet postane dostupna, korisniku se ispisuje poruka da je dostupna. E sad, uradio sam sve to, moj server je mutli thread, prilikom iznajmljivanja napravim novi tred koji ce spavati odredjeno vrijeme, i poslije isteka vremena saljem klijentu poruku na osnovu koje ce on ispisati da je knjiga opet dostupna. Problem je sto mi , kad iz tog treda na serveru posaljem klijentu poruku, tu pukne konekcija, baci se izuzetak java.net.ConnectException: Connection refused: connect.

Dio koda koji obradjuje iznajmljivanje, na serveru:

Code:
  //u konstruktoru klase su kreirani oos i ois objekti klasa ObjectOutputStream i ObjectInputStream, respektivno
            String request = (String)ois.readObject();
                 //...dio koda za obradu drugih zahtjeva
            //obrada zahtjeva za pretragu knjige
            if(request.startsWith("RENT")) {
              //uz rent sa klijenta se salje i username pa zato split
                String[] strings = request.split("#");
                for(int i = 0; i < Server.bookList.size(); i++) {  
                    if(Server.bookList.get(i).getBookName().equals(strings[1]) &&
                            Server.bookList.get(i).getIsItAvailable()) {
                        oos.writeObject("OK");
                        oos.flush();
                        Server.bookList.get(i).setIsItAvailable(false); // u klasi Knjiga imam bool atribut isItAvailable 
                        final Knjiga knjiga = Server.bookList.get(i);
                        System.out.println(request);
                       
                        new Thread() {
                            public void run() {
                                System.out.println("USLO U TRED!");
                                try {
                                    Random r = new Random();
                                    int rand = r.nextInt(30000) + 20000;
                                    Thread.sleep(rand);
                                    knjiga.setIsItAvailable(true);
                                    String name = knjiga.getBookName();
                                    oos.writeObject("AVAILABLE" + "#" + name); // ovde puca, ne posalje ovo
                                    System.out.println("Poslije vrajt objekta");
                                } catch (Exception ex) {
                                    ex.printStackTrace();
                                }
                            }
                        }.start();
                        oos.flush();                        
                    } else {
                        oos.writeObject("ERROR");
                    }
                }
            }
//... jos koda za obradu zahtjeva :)
            oos.close();
            ois.close();
            sock.close();


Sa klijentske strane dio koda koji obradi rezultate

Code:

       rent.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                try {

                InetAddress addr = InetAddress.getByName("127.0.0.1");
                Socket socket = new Socket(addr, TCP_PORT);
                ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                
                for(int i = 0; i < purchasedBooks.size(); i++) {
                    if(purchasedBooks.get(i).getChecked()) {
                        oos.writeObject("RENT" + "#" + purchasedBooks.get(i).getBookName());
                        String read = (String) ois.readObject();
                        if(read.equals("OK")) {
                            Alert alert = new Alert(AlertType.INFORMATION);
                            alert.setTitle("Obavjestenje");
                            alert.setContentText("Uspjesno ste iznajmili knjigu.");

                            alert.showAndWait();
                        } else if(read.equals("ERROR")){
                            Alert alert = new Alert(AlertType.WARNING);
                            alert.setTitle("Obavjestenje");
                            alert.setContentText("Knjiga je vec iznajmljena, probajte ponovo za minut");

                            alert.showAndWait();
                    } else {
                            String string = (String) ois.readObject();
                            System.out.println(string);
                            String strings[] = string.split("#");
                            Alert alert = new Alert(AlertType.INFORMATION);
                            System.out.println(strings[1]);
                            alert.setTitle("Obavjestenje");
                            alert.setContentText("Knjiga " + strings[1] + "je ponovo dostupna za iznajmljivanje.");

                            alert.showAndWait();
                            
                        }   
                    } 
                }
                oos.close();
                ois.close();
                socket.close();
                } catch(Exception e) {
                    e.printStackTrace();
            }
            }
        });

 
Odgovor na temu

Milan34

Član broj: 326385
Poruke: 9
31.223.129.*



Profil

icon Re: Java - Problem prilikom klijent server komunikacije19.06.2016. u 17:37 - pre 50 meseci
Problem rijesen. A do problema je doslo zato sto, dok se ovaj new Thread izvrsi, glavni tred se zavrsi i zatvori se konekcija, pa to bude problem. Izbrisao sam ovaj dio sa new Thread , a ostavio sleep i radi dobro.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 790
*.e-info.ba.



+61 Profil

icon Re: Java - Problem prilikom klijent server komunikacije20.06.2016. u 07:25 - pre 50 meseci
Ne bi trebalo da se zadovoljis tim resenjem (izbacivanjem thread-a).
Potrazi kako se radi sinhronizacija (trazi: konkurentno programiranje) thread-ova, kad-tad ce ti trebati. Ne znam ni jedan jezik koji se u tolikoj meri oslanja na thread-ove kao java.

Pozz
 
Odgovor na temu

Milan34

Član broj: 326385
Poruke: 9
89.111.233.*



Profil

icon Re: Java - Problem prilikom klijent server komunikacije20.06.2016. u 10:34 - pre 50 meseci
Mislis bas na synchronized blok ili?
Sad kad razmisljam mozda bi se moglo da glavni thread saceka izvrsavanje ovog, nesto poput

Code:

Thread t = new Thread {
    public void run() {...}
}.join();

Tako da bi tred trebao sacekati na izvrsenje koda u new Thread {...}

[Ovu poruku je menjao Milan34 dana 20.06.2016. u 14:14 GMT+1]
 
Odgovor na temu

[es] :: Java :: Java - Problem prilikom klijent server komunikacije

[ Pregleda: 1234 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.