Primeiramente gostaria de pedir desculpas se postei no local incorreto minha dúvida.
Meu problema é o seguinte, preciso fazer uma comunicação entre cliente e servidor, neste caso, quando eu completar a venda para certo cliente o servidor mandará os dados do cliente e da venda para o cliente (computador que ficará em seu quarto). Neste computador precisará aparecer Nome, CPF, dados do pacote comprado e os itens que seram ativados (ar condicionado, tv, banheira, luz), esses itens que seram ativados poderam ser modificados dentro do quarto mesmo nesta primeira implementação. Segue o código do Servidor e Cliente:
Servidor
[code]package Controller;
import Model.;
import java.io.;
import java.net.*;
public class serverSocket {
private static Object clienteSocket;
private static DataOutputStream out;
public static boolean executar(String cpf) {
Socket clientSocket = null;
registerSales rs = new registerSales();
Venda v = rs.Retrieve(cpf + ".txt");
String nomeCliente = v.getNomeCliente().getNome();
String cpfCliente = v.getNomeCliente().getCpf();
String nomePacote = v.getPacote().getNome();
String itensPacote = v.getPacote().getItens();
String canais = v.getPacote().getCanais();
String valorPacote = v.getPacote().getValor();
String valorTotal = v.getValor();
try {
int serverPort = 7000;
ServerSocket listenSocket = new ServerSocket(serverPort);
while (true) {
// esta linha é bloqueante ou seja fica aqui enquanto
// um cliente não aceita
clientSocket = listenSocket.accept();
out = new DataOutputStream(clientSocket.getOutputStream());
out.writeUTF(nomeCliente + "\nCPF: " + cpfCliente + "\n" + nomePacote + "\n" + itensPacote + "\n" + canais + "\n" + valorPacote + "\n" + valorTotal);
return false;
}
} catch (EOFException e) {
System.out.println("EOF:" + e.getMessage());
} catch (IOException e) {
System.out.println("IO:" + e.getMessage());
} finally {
try {
if (clienteSocket != null) {
clientSocket.close();
}
} catch (IOException e) {/*close failed*/
System.out.println("Close Failed: " + e.getMessage());
}
}// try
return true;
}// main
}// class[/code]
No caso quando o funcionário clicar no botão Confirmar na tela de venda ele passa o CPF do cliente em questão para esse método do Servidor para que ele mande as informações para o cliente, porém a tela de venda fica “travada” até que o eu rode o cliente, acho que resolvendo o problema do cliente aqui tambem será resolvido.
Cliente
[code]package View;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.;
import java.net.;
import javax.swing.*;
public class ClientWindow extends JFrame implements ActionListener {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Socket s = null;
try {
int serverPort = 7000;
s = new Socket("127.0.0.1", serverPort);
DataInputStream ois = new DataInputStream(s.getInputStream());
String todos = ois.readUTF();
System.out.println(todos);
} catch (UnknownHostException e) {
System.out.println("Sock:" + e.getMessage());
} catch (EOFException e) {
System.out.println("EOF:" + e.getMessage());
} catch (IOException e) {
System.out.println("IO:" + e.getMessage());
} finally {
if (s != null) {
try {
s.close();
} catch (IOException e) {
System.out.println("close:" + e.getMessage());
}
}
}// try
ClientWindow cw = new ClientWindow();
cw.setVisible(true);
} // main
JTextField txt_cpf;
JList list_itens;
JButton btn_pedido;
JButton btn_ambiente;
JLabel lbl_ativado;
JLabel lbl_cpf;
JLabel lbl_lista;
JButton btn_sair;
public ClientWindow() {
setTitle("Painel de Controle");
setSize(500, 500);
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setLayout(null);
txt_cpf = new JTextField();
txt_cpf.setBounds(90, 10, 200, 20);
list_itens = new JList();
list_itens.setBounds(90, 35, 200, 100);
btn_pedido = new JButton("Fazer Pedido");
btn_pedido.setBounds(10, 150, 150, 30);
btn_pedido.setEnabled(false);
btn_pedido.setToolTipText("Implementação Futura!");
btn_ambiente = new JButton("Ambiente");
btn_ambiente.setBounds(170, 150, 150, 30);
lbl_ativado = new JLabel("Desativado");
lbl_ativado.setBounds(300, 10, 150, 20);
lbl_ativado.setToolTipText("Estado do Painel");
lbl_cpf = new JLabel("CPF:");
lbl_cpf.setBounds(10, 10, 150, 20);
lbl_lista = new JLabel("Listagem:");
lbl_lista.setBounds(10, 35, 150, 20);
btn_sair = new JButton("Sair");
btn_sair.setBounds(85, 185, 150, 30);
btn_sair.addActionListener(this);
Container a = this.getContentPane();
a.add(txt_cpf);
a.add(list_itens);
a.add(lbl_cpf);
a.add(lbl_lista);
a.add(lbl_ativado);
a.add(btn_ambiente);
a.add(btn_pedido);
a.add(btn_sair);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(btn_sair)) {
this.setVisible(false);
}
}
}
[/code]
No cliente gostaria de saber como eu posso deixar o cliente em atividade aguardando uma resposta do servidor e como jogaria as informações recebidas na parte gráfica da tela (Jlist, JTextField…).
Outra dúvida. É melhor eu mandar uma mensagem para cada campo de informação que eu quiser que o cliente preencha ou posso mandar tudo concatenado como está?
Aceito sugestões, críticas ou qualquer coisa que me ajudar :lol:
Desde já obrigado à todos.