Chat Java Socket com swing

23/07/2019

0

Boa noite, estou desenvolvendo um chat Socket para uma aplicação java, o Chat funciona muito bem em minha maquina quando dou um java aplication na classe Cliente.java, mas preciso que o chat apareça em outra maquina, para isso criei uma classe Cliente2.java em outra aplicação e estou conseguindo me comunicar com elas em maquinas diferentes, o problema está que eu preciso criar um arquivo .Jar já existente para rodar em varias Maquinas então eu transformei o Main da classe Cliente2.java em um metodo qualquer para gerar o Chat na maquina cliente, mas o Servidor está chamando o metodo varias vezes dentro de uma Thread (Metodo Run) e não estou conseguindo fazer essa comunicação.

vou colocar apenas o codigo da classe Servidor para poupar tempo, o erro está no metodo Run chamar o metódo varias vezes :

package com.servidor;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

import com.cliente.Cliente2;

/*import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;*/

public class Servidor extends Thread {

private static ArrayList<BufferedWriter>clientes;
private static ServerSocket server;
private String nome;
private Socket con;
private InputStream in;
private InputStreamReader inr;
private BufferedReader bfr;


public Servidor(Socket con) throws IOException{
this.con = con;
try {
in = con.getInputStream();
inr = new InputStreamReader(in);
bfr = new BufferedReader(inr);
} catch (IOException e) {
e.printStackTrace();
}
}

public Servidor(){

}

public void run(){

try{

String msg;
OutputStream ou = this.con.getOutputStream();
Writer ouw = new OutputStreamWriter(ou);
BufferedWriter bfw = new BufferedWriter(ouw);
clientes.add(bfw);
nome = msg = bfr.readLine();
chamaCliente();

while(!"Sair".equalsIgnoreCase(msg) && msg != null)
{
msg = bfr.readLine();
sendToAll(bfw, msg);
System.out.println(msg);
}


}catch (Exception e) {
e.printStackTrace();

}
}

//metodo que chama o cliente2 para o chat
public void chamaCliente() throws IOException{
Cliente2 cli = new Cliente2();
cli.chamar();
}

/***
* Método usado para enviar mensagem para todos os clients
* @param bwSaida do tipo BufferedWriter
* @param msg do tipo String
*/
public void sendToAll(BufferedWriter bwSaida, String msg) throws IOException
{
BufferedWriter bwS;

for(BufferedWriter bw : clientes){
bwS = (BufferedWriter)bw;
if(!(bwSaida == bwS)){
bw.write(nome + " : " + msg+"\\r\\n");
bw.flush();
}
}
}

//public static void main(String []args) {
public void conectarServidor(){
try{
//Cria os objetos necessário para instânciar o servidor
server = new ServerSocket(44443);
clientes = new ArrayList<BufferedWriter>();

while(true){
System.out.println("Aguardando conexão...");
Socket con = server.accept();
System.out.println("Cliente conectado...");
Thread t = new Servidor(con);
t.start();

}

}catch (Exception e) {

e.printStackTrace();
}
}// Fim do método main

} //Fim da classe
Paulo Lima

Paulo Lima

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar