TCP/UDP

Java

23/10/2014

Escrever uma aplicação cliente servidor TCP e/ou UDP para enviar e receber mensagens de texto. O Cliente conecta ao servidor. O Cliente envia um numero de 1 a 10.
O servidor sorteia um num de 1 a 10 e responde o intervalo que o numero deve estar. O cliente envia outro numero dentro do novo intervalo. O servidor envia o novo
intervalo até o receba o numero sorteado. O servidor desfaz a conexão.
Fulero Santos

Fulero Santos

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

30/10/2014

Vamos lá, fiz algumas alterações na sua classe Server.java: Adicionei um método de sorteio simples no intervalo de 1 a 10 chamado de sorteiaValor(), e fiz uma condições para fazer com que o usuário continue digitando os valores de 1 a 10 até acertar e o Servidor fechar a conexão com ele, assim como pede o enunciado da questão.

Server.java

// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Server extends Thread {
    public final static int DEFAULT_PORT = 6789;
    protected int port;
    protected ServerSocket listen_socket;
    
    // Exit with an error message, when an exception occurs.
    public static void fail(Exception e, String msg) {
        System.err.println(msg + ": " +  e);
        System.exit(1);
    }
    
    // Create a ServerSocket to listen for connections on;  start the thread.
    public Server(int port) {
        if (port == 0) port = DEFAULT_PORT;
        this.port = port;
        try { listen_socket = new ServerSocket(port); }
        catch (IOException e) { fail(e, "Exception creating server socket"); }
        System.out.println("Server: listening on port " + port);
        this.start();
    }
    
    // The body of the server thread.  Loop forever, listening for and
    // accepting connections from clients.  For each connection, 
    // create a Connection object to handle communication through the
    // new Socket.
    public void run() {
        try {
            while(true) {
                Socket client_socket = listen_socket.accept();
                Connection c = new Connection(client_socket);
            }
        }
        catch (IOException e) { 
            fail(e, "Exception while listening for connections");
        }
    }
    
    // Start the server up, listening on an optionally specified port
    public static void main(String[] args) {
        int port = 0;
        if (args.length == 1) {
            try { port = Integer.parseInt(args[0]);  }
            catch (NumberFormatException e) { port = 0; }
        }
        new Server(port);
    }
}

// This class is the thread that handles all communication with a client
class Connection extends Thread {
    protected Socket client;
    protected DataInputStream in;
    protected PrintStream out;

    // Initialize the streams and start the thread
    public Connection(Socket client_socket) {
        client = client_socket;
        try { 
            in = new DataInputStream(client.getInputStream());
            out = new PrintStream(client.getOutputStream());
        }
        catch (IOException e) {
            try { client.close(); } catch (IOException e2) { ; }
            System.err.println("Exception while getting socket streams: " + e);
            return;
        }
        this.start();
    }
    
    private int sorteiaValor(){    	
    	Random random = new Random();          
        return random.nextInt(10);       
    }
    
    // Provide the service.
    // Read a line, reverse it, send it back.  
    public void run() {
        String line;
        try {
            for(;;) {
                // read in a line
                line = in.readLine();
                if (line == null){
                	out.println("Digite um número entre 1 e 10");
                   break;
                }else{
                	int valorSorteado = sorteiaValor();
                	System.out.println("Valor sorteado = "+valorSorteado);
                	System.out.println("Valor digitado pelo usuário = "+line);
                	if (valorSorteado == Integer.parseInt(line)){
                		out.println("Parabéns, você acertou o valor. " +
                				"O programa será encerrado");
                		return;
                	}else{
                		out.println("O valor sorteado é diferente do digitado. Tente novamente");
                	}
                }
            }
        }
        catch (IOException e) { ; }
        finally { try {client.close();} catch (IOException e2) {;} }
    }
}

GOSTEI 1

Mais Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

23/10/2014

Escrever uma aplicação cliente servidor TCP e/ou UDP para enviar e receber mensagens de texto. O Cliente conecta ao servidor. O Cliente envia um numero de 1 a 10.
O servidor sorteia um num de 1 a 10 e responde o intervalo que o numero deve estar. O cliente envia outro numero dentro do novo intervalo. O servidor envia o novo
intervalo até o receba o numero sorteado. O servidor desfaz a conexão.


A ideia aqui é usar Socket para tal comunicação, veja : https://www.devmedia.com.br/sockets-com-java-parte-i/9465
GOSTEI 0
Fulero Santos

Fulero Santos

23/10/2014

Sou grato pela colaboração amigo, mas mesmo assim o meu problema é que não conseguindo me familiarizar muito com a linguagem, se possivel gostaria que respondesse esta questão para que eu tomasse base para as outras....De já agradeço novamente a ajuda. Abraço!
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

23/10/2014

Não é bem assim que funciona Fulero Santos, você está pedindo que eu construa a aplicação toda para você e infelizmente isso não será possível. Estude mais sobre a linguagem Java e traga suas dúvidas que com certeza irei lhe ajudar no que puder.
GOSTEI 0
Fulero Santos

Fulero Santos

23/10/2014

Perdão amigo, eu não quis que construisse a aplicação. Já tenho toda pronta, só falta implementar o que tem no enunciado proposto acima, porém esqueci de anexar. Alias, não encontrei onde anexar o arquivo compactado com as estruturas prontas, umas vez que só há upload aqui para imagens. Como faço para subir o arquivo zipado. Grato pela colaboração! Abraço!
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

23/10/2014

Não tem como postar os codigos?
GOSTEI 0
Fulero Santos

Fulero Santos

23/10/2014

Acabei de encontrar uma solução....hospedei no google drive...vou mandar o link pra vc(s) baixar(em) os arquivos....

LINK PARA APLICACAO JAVA
GOSTEI 0
Fulero Santos

Fulero Santos

23/10/2014

Segue o link para download do arquivo zipado amigo....!

APLICACAO JAVA
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

23/10/2014

Sou grato pela colaboração amigo, mas mesmo assim o meu problema é que não conseguindo me familiarizar muito com a linguagem, se possivel gostaria que respondesse esta questão para que eu tomasse base para as outras....De já agradeço novamente a ajuda. Abraço!


Então seu problema não é relacionado a comunicação, já que você já tem ela pronta, é o algoritmo de sorteio de números que está lhe complicando, vou pensar na solução e lhe ajudar.
GOSTEI 0
Fulero Santos

Fulero Santos

23/10/2014

Alguém conseguiu implementar o meu problema? Preciso para até amanhã...por favor quem puder me ajudar serei muito grato. Abraço!
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

23/10/2014

Peço desculpas por não poder lhe dar uma ajuda maior mas ultimamente não estou com tempo sobrando. Enfim, a alguns dias atrás escrevi este artigo que pode ser de grande utilidade para você desenvolver sua lógica: https://www.devmedia.com.br/embaralhando-valores-em-java/31325
GOSTEI 0
Fulero Santos

Fulero Santos

23/10/2014

Tudo bem amigo, de qualquer forma agradeço....e continuo a pedir ajuda porque o professor estendeu o prazo até sexta feira (31/10/14) para podermos entregar.... !
GOSTEI 0
Luciano Chaves

Luciano Chaves

23/10/2014

Boa tarde!
Ronaldo, como ficaria a modificação na classe cliente?
GOSTEI 0
Luciano Chaves

Luciano Chaves

23/10/2014

Vamos lá, fiz algumas alterações na sua classe Server.java: Adicionei um método de sorteio simples no intervalo de 1 a 10 chamado de sorteiaValor(), e fiz uma condições para fazer com que o usuário continue digitando os valores de 1 a 10 até acertar e o Servidor fechar a conexão com ele, assim como pede o enunciado da questão.

Server.java

// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Server extends Thread {
    public final static int DEFAULT_PORT = 6789;
    protected int port;
    protected ServerSocket listen_socket;
    
    // Exit with an error message, when an exception occurs.
    public static void fail(Exception e, String msg) {
        System.err.println(msg + ": " +  e);
        System.exit(1);
    }
    
    // Create a ServerSocket to listen for connections on;  start the thread.
    public Server(int port) {
        if (port == 0) port = DEFAULT_PORT;
        this.port = port;
        try { listen_socket = new ServerSocket(port); }
        catch (IOException e) { fail(e, "Exception creating server socket"); }
        System.out.println("Server: listening on port " + port);
        this.start();
    }
    
    // The body of the server thread.  Loop forever, listening for and
    // accepting connections from clients.  For each connection, 
    // create a Connection object to handle communication through the
    // new Socket.
    public void run() {
        try {
            while(true) {
                Socket client_socket = listen_socket.accept();
                Connection c = new Connection(client_socket);
            }
        }
        catch (IOException e) { 
            fail(e, "Exception while listening for connections");
        }
    }
    
    // Start the server up, listening on an optionally specified port
    public static void main(String[] args) {
        int port = 0;
        if (args.length == 1) {
            try { port = Integer.parseInt(args[0]);  }
            catch (NumberFormatException e) { port = 0; }
        }
        new Server(port);
    }
}

// This class is the thread that handles all communication with a client
class Connection extends Thread {
    protected Socket client;
    protected DataInputStream in;
    protected PrintStream out;

    // Initialize the streams and start the thread
    public Connection(Socket client_socket) {
        client = client_socket;
        try { 
            in = new DataInputStream(client.getInputStream());
            out = new PrintStream(client.getOutputStream());
        }
        catch (IOException e) {
            try { client.close(); } catch (IOException e2) { ; }
            System.err.println("Exception while getting socket streams: " + e);
            return;
        }
        this.start();
    }
    
    private int sorteiaValor(){    	
    	Random random = new Random();          
        return random.nextInt(10);       
    }
    
    // Provide the service.
    // Read a line, reverse it, send it back.  
    public void run() {
        String line;
        try {
            for(;;) {
                // read in a line
                line = in.readLine();
                if (line == null){
                	out.println("Digite um número entre 1 e 10");
                   break;
                }else{
                	int valorSorteado = sorteiaValor();
                	System.out.println("Valor sorteado = "+valorSorteado);
                	System.out.println("Valor digitado pelo usuário = "+line);
                	if (valorSorteado == Integer.parseInt(line)){
                		out.println("Parabéns, você acertou o valor. " +
                				"O programa será encerrado");
                		return;
                	}else{
                		out.println("O valor sorteado é diferente do digitado. Tente novamente");
                	}
                }
            }
        }
        catch (IOException e) { ; }
        finally { try {client.close();} catch (IOException e2) {;} }
    }
}



Ronaldo, como ficaria a modificação na classe cliente?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

23/10/2014

Vamos lá, fiz algumas alterações na sua classe Server.java: Adicionei um método de sorteio simples no intervalo de 1 a 10 chamado de sorteiaValor(), e fiz uma condições para fazer com que o usuário continue digitando os valores de 1 a 10 até acertar e o Servidor fechar a conexão com ele, assim como pede o enunciado da questão.

Server.java

// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Server extends Thread {
    public final static int DEFAULT_PORT = 6789;
    protected int port;
    protected ServerSocket listen_socket;
    
    // Exit with an error message, when an exception occurs.
    public static void fail(Exception e, String msg) {
        System.err.println(msg + ": " +  e);
        System.exit(1);
    }
    
    // Create a ServerSocket to listen for connections on;  start the thread.
    public Server(int port) {
        if (port == 0) port = DEFAULT_PORT;
        this.port = port;
        try { listen_socket = new ServerSocket(port); }
        catch (IOException e) { fail(e, "Exception creating server socket"); }
        System.out.println("Server: listening on port " + port);
        this.start();
    }
    
    // The body of the server thread.  Loop forever, listening for and
    // accepting connections from clients.  For each connection, 
    // create a Connection object to handle communication through the
    // new Socket.
    public void run() {
        try {
            while(true) {
                Socket client_socket = listen_socket.accept();
                Connection c = new Connection(client_socket);
            }
        }
        catch (IOException e) { 
            fail(e, "Exception while listening for connections");
        }
    }
    
    // Start the server up, listening on an optionally specified port
    public static void main(String[] args) {
        int port = 0;
        if (args.length == 1) {
            try { port = Integer.parseInt(args[0]);  }
            catch (NumberFormatException e) { port = 0; }
        }
        new Server(port);
    }
}

// This class is the thread that handles all communication with a client
class Connection extends Thread {
    protected Socket client;
    protected DataInputStream in;
    protected PrintStream out;

    // Initialize the streams and start the thread
    public Connection(Socket client_socket) {
        client = client_socket;
        try { 
            in = new DataInputStream(client.getInputStream());
            out = new PrintStream(client.getOutputStream());
        }
        catch (IOException e) {
            try { client.close(); } catch (IOException e2) { ; }
            System.err.println("Exception while getting socket streams: " + e);
            return;
        }
        this.start();
    }
    
    private int sorteiaValor(){    	
    	Random random = new Random();          
        return random.nextInt(10);       
    }
    
    // Provide the service.
    // Read a line, reverse it, send it back.  
    public void run() {
        String line;
        try {
            for(;;) {
                // read in a line
                line = in.readLine();
                if (line == null){
                	out.println("Digite um número entre 1 e 10");
                   break;
                }else{
                	int valorSorteado = sorteiaValor();
                	System.out.println("Valor sorteado = "+valorSorteado);
                	System.out.println("Valor digitado pelo usuário = "+line);
                	if (valorSorteado == Integer.parseInt(line)){
                		out.println("Parabéns, você acertou o valor. " +
                				"O programa será encerrado");
                		return;
                	}else{
                		out.println("O valor sorteado é diferente do digitado. Tente novamente");
                	}
                }
            }
        }
        catch (IOException e) { ; }
        finally { try {client.close();} catch (IOException e2) {;} }
    }
}



Ronaldo, como ficaria a modificação na classe cliente?


Na classe cliente não mude nada, pois é apenas o servidor que vai cuidar do sorteio e o restante da lógica, a classe cliente apenas continua enviando o valor como já estava fazendo antes.
GOSTEI 0
Luciano Chaves

Luciano Chaves

23/10/2014

Vamos lá, fiz algumas alterações na sua classe Server.java: Adicionei um método de sorteio simples no intervalo de 1 a 10 chamado de sorteiaValor(), e fiz uma condições para fazer com que o usuário continue digitando os valores de 1 a 10 até acertar e o Servidor fechar a conexão com ele, assim como pede o enunciado da questão.

Server.java

// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Server extends Thread {
    public final static int DEFAULT_PORT = 6789;
    protected int port;
    protected ServerSocket listen_socket;
    
    // Exit with an error message, when an exception occurs.
    public static void fail(Exception e, String msg) {
        System.err.println(msg + ": " +  e);
        System.exit(1);
    }
    
    // Create a ServerSocket to listen for connections on;  start the thread.
    public Server(int port) {
        if (port == 0) port = DEFAULT_PORT;
        this.port = port;
        try { listen_socket = new ServerSocket(port); }
        catch (IOException e) { fail(e, "Exception creating server socket"); }
        System.out.println("Server: listening on port " + port);
        this.start();
    }
    
    // The body of the server thread.  Loop forever, listening for and
    // accepting connections from clients.  For each connection, 
    // create a Connection object to handle communication through the
    // new Socket.
    public void run() {
        try {
            while(true) {
                Socket client_socket = listen_socket.accept();
                Connection c = new Connection(client_socket);
            }
        }
        catch (IOException e) { 
            fail(e, "Exception while listening for connections");
        }
    }
    
    // Start the server up, listening on an optionally specified port
    public static void main(String[] args) {
        int port = 0;
        if (args.length == 1) {
            try { port = Integer.parseInt(args[0]);  }
            catch (NumberFormatException e) { port = 0; }
        }
        new Server(port);
    }
}

// This class is the thread that handles all communication with a client
class Connection extends Thread {
    protected Socket client;
    protected DataInputStream in;
    protected PrintStream out;

    // Initialize the streams and start the thread
    public Connection(Socket client_socket) {
        client = client_socket;
        try { 
            in = new DataInputStream(client.getInputStream());
            out = new PrintStream(client.getOutputStream());
        }
        catch (IOException e) {
            try { client.close(); } catch (IOException e2) { ; }
            System.err.println("Exception while getting socket streams: " + e);
            return;
        }
        this.start();
    }
    
    private int sorteiaValor(){    	
    	Random random = new Random();          
        return random.nextInt(10);       
    }
    
    // Provide the service.
    // Read a line, reverse it, send it back.  
    public void run() {
        String line;
        try {
            for(;;) {
                // read in a line
                line = in.readLine();
                if (line == null){
                	out.println("Digite um número entre 1 e 10");
                   break;
                }else{
                	int valorSorteado = sorteiaValor();
                	System.out.println("Valor sorteado = "+valorSorteado);
                	System.out.println("Valor digitado pelo usuário = "+line);
                	if (valorSorteado == Integer.parseInt(line)){
                		out.println("Parabéns, você acertou o valor. " +
                				"O programa será encerrado");
                		return;
                	}else{
                		out.println("O valor sorteado é diferente do digitado. Tente novamente");
                	}
                }
            }
        }
        catch (IOException e) { ; }
        finally { try {client.close();} catch (IOException e2) {;} }
    }
}



Ronaldo, como ficaria a modificação na classe cliente?


Na classe cliente não mude nada, pois é apenas o servidor que vai cuidar do sorteio e o restante da lógica, a classe cliente apenas continua enviando o valor como já estava fazendo antes.


Boa tarde, Ronaldo!
Eu estou executando os dois pelo NetBeans, primeiro o server e depois o cliente.
Após executar o server aparece:

run:
Server: listening on port 6789

Ao executar o cliente, aparece:
run:
Usage: java Client <hostname> [<port>]
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)


Não era pra haver uma conexão entre os dois com envio e recebimento de mensagens?
O cliente não me dá opções de digitar nada e no servidor, se eu digito um número qualquer, nada acontece.
O que há de errado?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

23/10/2014

O servidor você iniciou corretamente. Mas quando for iniciar o cliente precisa passar os argumentos para a classe, são eles: hostname e porta, ou seja, você precisa executar a classe assim:

java Client localhost 6789


Ou pelo netbeans mesmo você deve adicionar os argumentos no caminho:

Run->Set Project Configuration->Customise->Arguments[localhost 6789]->Ok
GOSTEI 0
POSTAR