Boa noite galera.
Sou iniciante em JAVA, venho estudando constantemente e consequentemente, tendo dúvidas constantemente… rsrs
No trabalho me pediram pra criar um chat para ser usado a principio internamente, pra comunicação entre os departamentos já que ficamos todos divididos entre 1º, 2º,3º,7º,9º,12º,15º,16º e 17º andar, comecei a estudar sockets… Estou criando um chat, porém, essa comunicação não está saindo…
Tenho o livro do Deitel, sinceramente achei muito confuso a forma como é ensinado a usar sockets no livro dele, JAVA como programar 6º edição, procurei outras fontes e venho chegando a algumas conclusões equivocadas…
O que ocorre é que o Servidor sequer está abrindo, as mensagens estão dando erro, no Cliente as mensagens estão saindo e aparecendo no JTextArea de lá, porém, não estão chegando ao servidor, conforme o erro relatado anteriormente…
Não é nada profissional é bem amador mesmo…
Vou postar aqui o que programei até aqui e se possível, me ajudem…
Declarei algumas coisas que serão usadas mais adiante, assim que eu aprender bem a parte de sockets… Portando, podem desconsiderar a parte do java.sql.*; que eu vou aplicar mais pra frente pra gravar as conversas num banco de dados… Uma exigência da empresa…
Segue o código:
Cliente:
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
class Cliente extends JFrame implements AdjustmentListener , ActionListener , ListSelectionListener{
JLabel lblNomeChat, lblUsuario, lblConversa, lblMensagem, lblMensagemPre;
JTextArea taConversa, taMensagem;
JScrollBar scroll1, scroll2;
JButton btEnviar, btSalvar, btLimpar, btFechar;
JList lista;
DefaultListModel listModel;
Date data = new Date();
Socket socket = null;
PrintStream ps = null;
Cliente(){
super("Atendimento personalizado");
setBounds(50,50,800,600);
setResizable(false);
getContentPane().setLayout(null);
lblNomeChat = new JLabel("Chat");
lblNomeChat.setBounds(5,5,200,30);
lblNomeChat.setFont(new Font("Comic Sams",Font.BOLD,22));
getContentPane().add(lblNomeChat);
lblUsuario = new JLabel("Usuário");
lblUsuario.setBounds(600,5,200,30);
lblUsuario.setFont(new Font("Comic Sams",Font.BOLD,14));
getContentPane().add(lblUsuario);
lblConversa = new JLabel("Conversa: ");
lblConversa.setBounds(5,30,200,30);
lblConversa.setFont(new Font("Comic Sams",Font.BOLD,12));
taConversa = new JTextArea();
taConversa.setBounds(5,55,550,350);
taConversa.setFont(new Font("Comic Sams",Font.BOLD,12));
taConversa.setEnabled(false);
getContentPane().add(lblConversa);
getContentPane().add(taConversa);
lblMensagem = new JLabel("Mensagem: ");
lblMensagem.setBounds(5,410,200,30);
lblMensagem.setFont(new Font("Comic Sams",Font.BOLD,12));
taMensagem = new JTextArea();
taMensagem.setBounds(5,440,550,120);
getContentPane().add(lblMensagem);
getContentPane().add(taMensagem);
lblMensagemPre = new JLabel("Mensagens Pré-Definidas");
lblMensagemPre.setToolTipText("Selecione um item na lista e em seguida clique em Enviar Mensagem");
lblMensagemPre.setBounds(570,30,200,20);
listModel = new DefaultListModel();
listModel.addElement("Bom dia - Apresentação");
listModel.addElement("Boa tarde - Apresentação");
listModel.addElement("Boa noite - Apresentação");
listModel.addElement(" ");
listModel.addElement("Bom dia - Encerramento");
listModel.addElement("Boa tarde - Encerramento");
listModel.addElement("Boa noite - Encerramento");
lista = new JList(listModel);
lista.addListSelectionListener(this);
lista.setBounds(570,55,200,350);
lista.setModel(listModel);
getContentPane().add(lblMensagemPre);
getContentPane().add(lista);
btEnviar = new JButton("Enviar Mensagem"); btEnviar.addActionListener(this);
btEnviar.setBounds(570,440,200,20);
btEnviar.setToolTipText("Pressione aqui para enviar a sua mensagem.");
btEnviar.setMnemonic(KeyEvent.VK_E);
getContentPane().add(btEnviar);
btLimpar = new JButton("Limpar Mensagem"); btLimpar.addActionListener(this);
btLimpar.setBounds(570,470,200,20);
btLimpar.setToolTipText("Pressione aqui para limpar o campo de mensagens do seu chat");
btLimpar.setMnemonic(KeyEvent.VK_L);
getContentPane().add(btLimpar);
btSalvar = new JButton("Salvar Conversa"); btSalvar.addActionListener(this);
btSalvar.setBounds(570,500,200,20);
btSalvar.setToolTipText("Pressione aqui para salvar a conversa.");
btSalvar.setMnemonic(KeyEvent.VK_F);
getContentPane().add(btSalvar);
btFechar = new JButton("Fechar"); btFechar.addActionListener(this);
btFechar.setBounds(570,530,200,20);
btFechar.setToolTipText("Pressione aqui para fechar a aplicação.");
btFechar.setMnemonic(KeyEvent.VK_F);
getContentPane().add(btFechar);
}
public void adjustmentValueChanged(AdjustmentEvent e) {
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==btEnviar){
if (taMensagem.getText().equals("")||taMensagem.getText().equals(" ")){
JOptionPane.showMessageDialog(null, "Por favor, preencha o campo de mensagem" +
"\n com pelo menos um caracter. Obrigado!");
}
else{
taConversa.setText( taConversa.getText()
+ lblUsuario.getText()+ "\n"
+ data + "\n"
+ taMensagem.getText()+ "\n");
taMensagem.setText("");
try{
String recebeConversa = taConversa.getText()
+ lblUsuario.getText()+ "\n"
+ data + "\n"
+ taMensagem.getText()+ "\n";
ps = new PrintStream(socket.getOutputStream());
ps.println(recebeConversa);
}
catch(IOException e1) {
}
}
}
if(e.getSource()==btLimpar){
taMensagem.setText("");
}
if(e.getSource()==btSalvar){
if(taMensagem.getText().equals("")){
JOptionPane.showMessageDialog(null, "Nada foi escrito no dialogo.");
}
if(taConversa.getText().equals("")){
JOptionPane.showMessageDialog(null, "Não foi possível realizar a gravação." +
"\nMotivo: Não existe dialogo a ser gravado.");
}
else{
PrintWriter out;
try {
out = new PrintWriter(lblUsuario.getText()+".txt");
out.println("Conteúdo da conversa de: "+lblUsuario.getText());
out.println("Conversa gravada às: "+ data);
out.println("-------------------------------------------- ");
out.println(taConversa.getText());
out.println("-------------------------------------------- ");
out.println("Fim da conversa!");
out.close();
JOptionPane.showMessageDialog(null, "Conversa gravada com sucesso!");
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
if(e.getSource()==btFechar){
System.exit(0);
}
}
public void valueChanged(ListSelectionEvent e) {
}
public static void main(String[] args) {
JFrame janela = new Cliente();
janela.setDefaultCloseOperation(EXIT_ON_CLOSE);
janela.setVisible(true);
}
}
Servidor:
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
public class Servidor extends JFrame{
JTextArea taConversa;
ServerSocket servidor = null;
Socket socket = null;
BufferedReader papo;
Servidor() {
super("Servidor");
setResizable(false);
setBounds(5,5,800,600);
getContentPane().setLayout(null);
taConversa = new JTextArea();
taConversa.setBounds(5,30,780,500);
taConversa.setEditable(false);
getContentPane().add(taConversa);
try{
servidor = new ServerSocket(7000);
socket = servidor.accept();
papo = new BufferedReader(new InputStreamReader(socket.getInputStream()));
taConversa.setText(taConversa.getText() + papo.readLine());
socket.close();
servidor.close();
}
catch (IOException e){
}
}
public static void main(String args[]) throws IOException{
JFrame srv = new Servidor();
srv.setVisible(true);
srv.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
Aguardo a ajuda de vocês, bom final de semana e bom carnaval a todos…