pessoal to resolvendo um chat via apostila FJ-11 e tenho a minha classe Cliente.
no DOS roda ela C:\JAVA CLIENTE
mas como passo junto a string NOME que defini para receber como parametro no construtor dela?
abaixo minha classe:
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Cliente {
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
new Cliente("127.0.0.1", 12345, "nome").executa();
}
private String host;
private int porta;
private String nome;
public Cliente (String host, int porta, String nome) {
this.host = host;
this.porta = porta;
this.nome = nome;
}
public void executa() throws UnknownHostException, IOException {
Socket cliente = new Socket(this.host, this.porta);
System.out.println("O cliente se conectou ao servidor!");
// thread para receber mensagens do servidor
Recebedor r = new Recebedor(cliente.getInputStream());
new Thread(r).start();
// le msgs do teclado e manda pro servidor
Scanner teclado = new Scanner(System.in);
PrintStream saida = new PrintStream(cliente.getOutputStream());
while (teclado.hasNextLine()) {
saida.println(nome + teclado.nextLine());
}
saida.close();
teclado.close();
cliente.close();
}
}
no mail, tem o parâmetro args, que é um String[], essas Strings são os parâmetros que o SO passa para ele. Pega a primeira posição e você terá o primeiro parâmetro.
pessoal eu tenho minha classe Cliente que no prompt do DOS rodo assim
c:\java Cliente
mas como faço pra passar junto uma string?
c:\java Cliente string
tentei assim e nao funcionou
abaixo minha classe
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Cliente {
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
new Cliente("127.0.0.1", 12345, "nome").executa();
}
private String host;
private int porta;
private String nome;
public Cliente (String host, int porta, String nome) {
this.host = host;
this.porta = porta;
this.nome = nome;
}
public void executa() throws UnknownHostException, IOException {
Socket cliente = new Socket(this.host, this.porta);
System.out.println("O cliente se conectou ao servidor!");
// thread para receber mensagens do servidor
Recebedor r = new Recebedor(cliente.getInputStream());
new Thread(r).start();
// le msgs do teclado e manda pro servidor
Scanner teclado = new Scanner(System.in);
PrintStream saida = new PrintStream(cliente.getOutputStream());
while (teclado.hasNextLine()) {
saida.println(nome + ": " + teclado.nextLine());
}
saida.close();
teclado.close();
cliente.close();
}
}
pq vc fala DOS? pq naum cria um executável (*.jar) e faz a programação toda nele com caixa de texto e um botão pra mandar essa info? axo mais prático do que fazer do jeito que vc ker…
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
String nome = args.lenght>0?args[0]:"parametro padrão";
new Cliente("127.0.0.1", 12345, nome).executa();
}
depois é só fazer
Javac Cliente.java
java Cliente teste
[/quote]
oi cara obrigado pela ajuda
fiz algo errado e nao funfou
sera que é algo que tem errado no meu cod?
abri dois prompt do dos (um pro serv e outro pro cliente)
dei C:\JAVAC *.JAVA (compilei todas .class)
no cliente dei c:\java Cliente PAULO
ai escrevi “ola” no Cliente
public class Cliente {
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
String nome = args.length>0?args[0]:“parametro padrão”;
new Cliente(“127.0.0.1”, 12345, “nome”).executa();
}
private String host;
private int porta;
private String nome;
public Cliente (String host, int porta, String nome) {
this.host = host;
this.porta = porta;
this.nome = nome;
}
public void executa() throws UnknownHostException, IOException {
Socket cliente = new Socket(this.host, this.porta);
System.out.println("O cliente se conectou ao servidor!");
// thread para receber mensagens do servidor
Recebedor r = new Recebedor(cliente.getInputStream());
new Thread(r).start();
// le msgs do teclado e manda pro servidor
Scanner teclado = new Scanner(System.in);
PrintStream saida = new PrintStream(cliente.getOutputStream());
while (teclado.hasNextLine()) {
saida.println(nome + ": " + teclado.nextLine());
}
saida.close();
teclado.close();
cliente.close();
}
public class Cliente {
public static void main(String[] args) throws UnknownHostException, IOException {
// dispara cliente
String nome = args.length>0?args[0]:"parametro padrão"; // ate entendo o op ternario mas...fiquei na duvida assim:
// se comprimento do array "args" > 0 devolve array "args" na posição 0 e se nao devolve a string "parametro padrão"
//posição 0 seria: java Cliente "posição zero"
// correto?
// e pq esse "parametro padrão" na linha de comando ?
new Cliente("127.0.0.1", 12345, nome).executa();
}
private String host;
private int porta;
private String nome;
public Cliente (String host, int porta, String nome) {
this.host = host;
this.porta = porta;
this.nome = nome; // E FIQUEI COM A DECLARAÇÃ REPETIDA. TA CERTO ISSO?
}
o lenght retorna o tamanho do array, no caso, a quantidade de parâmetros passados. Se foi passado algum parâmetro, o tamanho do array vai ser maior que 0, se não foi passado nenhum parâmetro, vai ser passado o “parâmetro padrão” (que vc pode passar outra coisa)