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
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)