Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Dwóch klientów jeden serwer



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Java
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Match_day



Dołączył: 05 Sty 2014
Posty: 1

PostWysłany: Nie Sty 05, 2014 1:33 pm  OP    Temat postu: Dwóch klientów jeden serwer Odpowiedz z cytatem Pisownia

Dzień dobry,
Serwer (kod poniżej) jest uruchomiony, zatrzyma się na "providerSocket = new ServerSocket(2040, 10);" teraz włączam klienta który łączy się z serwerem na porcie 2040. Serwer powinien wymienić komunikaty(wszystko co jest w klasie HandlerThread więc "sendMessage("Trent welcome");" otrzymac id od klienta "String id = (String)in.readObject();" ustawić zmienną A lub B na true itd.) z tym klientem następnie podłącza się klient B który dokonuje wymiany tych samych danych co klient A (w tym ustawienie zmiennej B na true). Następnie kiedy serwer zobaczy, że obie zmienne (A i B) są true powinien wysłać zarówno do A jak i B potwierdzenie czyli stringa np. "ok". Problem w tym, że po podłączeniu się klienta B serwer nie może odwołać się do klienta A, moje pytanie, co powinienem zrobić abym mógł do obydwóch klientów wysłać potwierdzenie ?

Kod:
package testtrent;

import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TestTrent{
    ServerSocket providerSocket;
    Socket connection = null;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;
        int size_M_S;
        byte [] M_S_bA = new byte[138];
        byte [] M_S_bB = new byte[138];
        boolean A = false;
        boolean B = false;
    TestTrent(){}
    void run() throws IOException, InterruptedException
    {
            //1. creating a server socket
            providerSocket = new ServerSocket(2040, 10);
            //2. Wait for connection
            System.out.println("Waiting for connection");
                        /*while (true) {
                            System.out.println("A="+A+" B="+B);
                            if(A==true && B==true){System.out.println("Both equal True");}

                            Socket connection = providerSocket.accept();
                            Thread thr = new TestTrent.HandlerThread(connection);
                            thr.start();
                        }*/
                        Thread[] thr = new Thread[3];
                            for (int i = 0; i < thr.length; i++) {
                                Socket connection = providerSocket.accept();
                                thr[i] = new TestTrent.HandlerThread(connection);
                                thr[i].start();
                            }

            //System.out.println("Connection received from " + connection.getInetAddress().getHostName());


        }


    public static void main(String args[]) throws IOException, InterruptedException
    {
        TestTrent server = new TestTrent();
        while(true){
            server.run();
        }
    }
        private class HandlerThread extends Thread {
        private Socket s;
        HandlerThread(Socket s) {
            this.s = s;
        }
        public void run() {
            try {
                out = new ObjectOutputStream(s.getOutputStream());
                in = new ObjectInputStream(s.getInputStream());
                sendMessage("Trent welcome");
                String id = (String)in.readObject();
                size_M_S = (int)in.readObject();
                byte [] M_S_b = new byte[size_M_S];
                for (int i = 0; i < size_M_S; ++i)
                {
                          M_S_b[i] = (byte )in.readObject();
                }
                if (id.equals("Alice"))
                for (int i = 0; i < size_M_S; ++i)
                {
                          M_S_bA[i] = M_S_b[i];
                          A = true;
                }
                if (id.equals("Bob"))
                for (int i = 0; i < size_M_S; ++i)
                {
                          M_S_bB[i] = M_S_b[i];
                          B = true;
                }

            } catch (IOException ex) {
                Logger.getLogger(TestTrent.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(TestTrent.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        void sendMessage(String msg)
    {
        try{
            out.writeObject(msg);
            out.flush();
            System.out.println("server>" + msg);
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
    }
     }
}
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Java Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.22109 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |