Olha para todos! esse é meu primeiro acesso ao forum.
To implementando um chat só via socket.`Bom é pro programa mandar uma mensagem para todos os cliente conectados, mas ele só envia para se mesmo.
algum pode me ajudar. ai vai o código completo.
Classe Cliente:
[b]import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import javax.swing.JOptionPane;
public class Cliente {
private Socket socket_cliente;
private DataOutputStream saida;
private RecebedorMsgCliente receber;
private String host;
private int porta;
public Cliente(String host, int porta) {
setHost(host);
setPorta(porta);
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPorta() {
return porta;
}
public void setPorta(int porta) {
if (porta <= 0) {
throw new IllegalArgumentException("Porta deve ser um número positivo");
}
this.porta = porta;
}
public void init(){
try{
socket_cliente=new Socket(host,porta);
receber=new RecebedorMsgCliente(socket_cliente.getInputStream());
receber.start();
}catch(UnknownHostException e){
JOptionPane.showMessageDialog(null, e.getMessage());
}catch(IOException e){
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
public void enviaMensagens(String texto) {
try {
saida=new DataOutputStream(socket_cliente.getOutputStream());
saida.writeUTF(texto);
}catch (IOException e) {
JOptionPane.showMessageDialog(null,e.getMessage());
}
}
}[/b]
Classe Thread:
[b]import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JOptionPane;
[color=#444444][/color]
public class RecebedorMsgCliente extends Thread {
private DataInputStream entrada;
InputStream in;
public RecebedorMsgCliente(InputStream in) {
this.in=in;
}
@Override
public synchronized void start() {
super.start();
}
@Override
public void run(){
entrada=new DataInputStream(in);
try {
String a =entrada.readUTF();
Chat.jTextAreaChat.append("\n"+a);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
}[/b]
Classe Servidor:
[b]import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
public class Servidor {
private ServerSocket socketServidor;
private Socket socketCliente;
private DataOutputStream saida;
private DataInputStream entrada;
private final int porta=1234;
private List<Socket> clientes;
public Servidor(){
//super();
clientes = new ArrayList<Socket>();
}
public void init(){
try {
socketServidor=new ServerSocket(porta);
while(true){
socketCliente = socketServidor.accept();
System.out.println("Nova conexão com o cliente " + formataCliente(socketCliente));
clientes.add(socketCliente);
RecebedorMsgServidor recebedor = new RecebedorMsgServidor(socketCliente.getInputStream(), this);
recebedor.start();
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
public void distribuiMensagem(String msg) {
try {
for (Socket cliente : clientes) {
saida=new DataOutputStream(socketCliente.getOutputStream());
saida.writeUTF(formataCliente(cliente) + ": " + msg);
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null,e.getMessage());
}
}
private String formataCliente(Socket cliente) {
return cliente.getInetAddress().getHostAddress() + ":" + cliente.getPort();
}
public static void main(String arges[]){
Servidor c=new Servidor();
c.init();
}
}[/b]
Classe Thread:
[b]import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JOptionPane;
public class RecebedorMsgServidor extends Thread {
private DataInputStream entrada;
private InputStream in;
private Servidor serv;
public RecebedorMsgServidor(InputStream in,Servidor serv) {
this.in=in;
this.serv=serv;
}
@Override
public void run(){
entrada=new DataInputStream(in);
try {
String a = entrada.readUTF();
serv.distribuiMensagem(a);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
}[/b]
Classe do Chat interface:
[b]public class Chat extends javax.swing.JFrame {
public static Cliente cliente;
public Chat() {
initComponents();
cliente=new Cliente("localhost",1234);
//cliente.init();
}
//BUTÂO
private void jButtonEnviarActionPerformed(java.awt.event.ActionEvent evt) {
//cliente=new Cliente("localhost",1234);
cliente.init();
cliente.enviaMensagens(jTtexto.getText());
} [/b]