NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
werixon
Člen
Avatar
werixon:31.5.2017 17:31

Ahoj, prosim o pomoc s nasledujicim kodem. Funguje mi odeslani textu od klienta k serveru, ale opacne ne. Proc?

public class Server {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(24000);
        Socket socket = server.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String veta;
        while((veta = br.readLine())!= null){
            System.out.println("Client rika " + veta);
        }

        System.out.println("server posila ");
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write(veta);
        System.out.println("server posila ");
        bw.newLine();
        bw.flush();
        socket.close();
    }

}

a

public class Client {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 24000);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("ahoj");
        bw.newLine();
        bw.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String veta;
        while((veta = br.readLine()) != null){
            System.out.println("Server rika:" + veta);

        }
        br.close();
        socket.close();
    }

}

Diky za radu

 
Odpovědět
31.5.2017 17:31
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na werixon
pocitac770:1.6.2017 20:50

Prakticky máš chybu u Serveru, teoreticky u obou, pokud by jsi to chtěl vylepšovat na nějaký opravdu chatovací klient

while((veta = br.readLine())!= null){
            System.out.println("Client rika " + veta);
        }

Po částech...

veta = br.readLine()

Nejprve z celé podmínky proběhne tento kód. Ten říká, že program čeká, dokud klient nepošle odřádkování. Tudíž jakmile ty něco na klientovi pošleš, tak se onen řádek uloží do proměnné a program pokračuje dál.

if(veta != null)

No, tak díky tomu, že vždy čekáme na zprávu od klienta, tak kromě chybových situací tam vždy něco bude ve chvíli, co budeme podmínku kontrolovat.
Co z toho vyplývá? Podmínka bude vždy splněna, a program se nikdy nedostane dál. Program, který by toto dokázal bez potíží se řeší s pomocí vláken, kde jedno poslouchá klienta, a druhé odesílá zprávy.

 
Nahoru Odpovědět
1.6.2017 20:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.