TCP/UDP
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.
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
Curtidas 0
Melhor post
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
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
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.
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
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
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
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
23/10/2014
Não tem como postar os codigos?
GOSTEI 0
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
LINK PARA APLICACAO JAVA
GOSTEI 0
Fulero Santos
23/10/2014
GOSTEI 0
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
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
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
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
23/10/2014
Boa tarde!
Ronaldo, como ficaria a modificação na classe cliente?
Ronaldo, como ficaria a modificação na classe cliente?
GOSTEI 0
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
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
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
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
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
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
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:
Ou pelo netbeans mesmo você deve adicionar os argumentos no caminho:
Run->Set Project Configuration->Customise->Arguments[localhost 6789]->Ok
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