Chat java como ver todos os clientes conectados?

9 respostas
R

estou desenvolvendo um chat tudo está ok, estou precisando de um jeito para fazer com que todos os clientes vejam quem está conectado!

9 Respostas

D

uma thread que verifica um array de usuarios no servidor ? e retorna para o cliente ?

R

Isso! como poderia fazer isso!

D

posta o código do seu chat =)

R
package projetos.msn;

import java.awt.EventQueue;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class ClienteGUI extends JFrame {
	
	private JPanel contentPane;
	private JTextField textField;
	private Socket socket;
	private Scanner scn;
	private PrintWriter print;
	private JTextArea textArea;
    public String nome;
	private Login lg;
	public static JTextArea txtrFff;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		
		
	}

	public void configRede(){
		try{
		socket = new Socket(lg.ip,lg.porta);
	
		print = new PrintWriter(socket.getOutputStream());
		scn = new Scanner(socket.getInputStream());
		new Thread(new EscutaServer()).start();
		
		}catch(Exception ex){
			//ex.printStackTrace();
			
			JanelaDeErro jE = new JanelaDeErro();
			
		}
	}
	
	private class EscutaServer implements Runnable{
		Scanner scanner;
		public EscutaServer(){
			try {
				scanner = new Scanner(socket.getInputStream());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		public void run() {
			try{
			String line;
			while((line = scanner.nextLine())!= null){
				
				
				textArea.append(line+"\n");
				textField.setText("");
				setVisible(false);
				setVisible(true);
				System.out.println(textArea.getText());
			}
			scanner.close();
			
			}catch(Exception exc){
				System.out.println("erro escutaServer");
			}
		}
		
	
	
	
		
	}
	public ClienteGUI(String nome) {
		
		super("RW Mensageiro : "+nome);
		this.nome = nome;
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		setVisible(true);
			
		JButton btnEnviar = new JButton("Enviar");
		btnEnviar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					
					print.println(ClienteGUI.this.nome +" diz: "+textField.getText());
					print.flush();
					
				}catch(Exception ex){
					System.out.println("erro enviar");
				}
				
				
			}
		});
		
		textField = new JTextField();
		textField.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
							
				if(e.getKeyCode()==10){
					try {
						
						print.println(ClienteGUI.this.nome +" diz: "+textField.getText());
						print.flush();
						
					}catch(Exception ex){
						System.out.println("erro enviar");
					}
				}
			}
		});
		textField.setColumns(10);
		
		JScrollPane scrollPane = new JScrollPane();
		//socket
		configRede();
		
		
		
		JScrollPane scrollPane_1 = new JScrollPane();
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addComponent(textField, GroupLayout.PREFERRED_SIZE, 217, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
							.addComponent(btnEnviar))
						.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
							.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 190, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
							.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 94, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap())
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 330, GroupLayout.PREFERRED_SIZE)
						.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 329, GroupLayout.PREFERRED_SIZE))
					.addGap(10)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnEnviar)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, 29, GroupLayout.PREFERRED_SIZE))
					.addContainerGap())
		);
		
		 textArea = new JTextArea();
		textArea.setEditable(false);
		scrollPane_1.setViewportView(textArea);
		
		 txtrFff = new JTextArea();
		txtrFff.setEditable(false);
		scrollPane.setViewportView(txtrFff);
		contentPane.setLayout(gl_contentPane);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 332, 437);
		setResizable(false);
		
	}
}
package projetos.msn;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Label;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Servidor extends JFrame{
	
	List<PrintWriter> escritores = new ArrayList<PrintWriter>();
	public void sendAll(String texto){
		for(PrintWriter escreve : escritores){
			escreve.println(texto);
			escreve.flush();
			
		}
	}
	private Socket socket;
	private ServerSocket server;
	private Scanner scn;
	private PrintWriter print;
	private JTextField texto;
	private int porta;
	private boolean portaOk = false;
	public Servidor(){
		super("Server");
		
		texto = new JTextField();
		texto.setFont(new Font("serif",Font.PLAIN,16));
		texto.setColumns(5);
		texto.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode()==10){
					porta = Integer.parseInt(texto.getText());
					portaOk=true;
				}
				
			}
		});
		
		JLabel label = new JLabel("Porta : ");
		JLabel label2 = new JLabel("Esperando Cliente");
		label2.setVisible(false);
		Container cont = getContentPane();
		cont.setLayout(new FlowLayout());
		cont.add(label);
		cont.add(texto);
		cont.add(label2);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(200,100);
		setVisible(true);
		while(portaOk==false){
			
		}
		
		try{
			server = new ServerSocket(porta);
			texto.setEditable(false);
			label2.setVisible(true);
			while(true){
				socket = server.accept();
				System.out.println("Conected");
				 print = new PrintWriter(socket.getOutputStream());
				escritores.add(print);
				new Thread(new EscutaCliente(socket)).start();
				
			}
			
		}catch(Exception exc){
			System.out.println("erro no servidor serverSocket");
			
		}
		System.out.println(server.getLocalPort());
	}
	private class EscutaCliente implements Runnable{
		Scanner scn2;
		public EscutaCliente(Socket socket){
		try{
			scn2 = new Scanner(socket.getInputStream());	
		  }catch(Exception exc2){
			  System.out.println("erro servidor scanner");
		  }
		}
		@Override
		public void run() {
			try{
			String texto;
			while((texto = scn2.nextLine())!= null){
				System.out.println(texto);
				sendAll(texto);
				 
			}
			
			
			}catch(Exception ex){
				System.out.println("Desconectado");
				
			}
		}
				
	}
	
	
	
	
	public static void main(String[] args) {
		new Servidor();

	}

}
public class Login extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextField textField_1;
	public static String ip;
	public static String nome;
	private Socket socket;
	private Scanner scn;
	private PrintWriter print;
	private JTextField textField_2;
	public static int porta;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		new Login();
		
	}
	public void configRede(){
		try{
		socket = new Socket(ip,porta);
		
		print = new PrintWriter(socket.getOutputStream());
		scn = new Scanner(socket.getInputStream());
		new Thread(new EscutaServer()).start();
		
		}catch(Exception ex){
			//ex.printStackTrace();
			
			JanelaDeErro jE = new JanelaDeErro();
			
		}
	}
	
	
	private class EscutaServer implements Runnable{
		Scanner scanner;
		public EscutaServer(){
			try {
				scanner = new Scanner(socket.getInputStream());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		public void run() {
			try{
			String line;
			while((line = scanner.nextLine())!= null){
				System.out.println(line);
								
			}
			scanner.close();
			
			}catch(Exception exc){
				System.out.println("erro escutaServer");
			}
		}
	
	
	}

	public Login() {
		super ("titulo");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 398, 213);
		setVisible(true);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		textField = new JTextField("127.0.0.1");
		textField.setColumns(10);
		
		textField_1 = new JTextField();
		textField_1.setColumns(10);
		
		JButton btnEntrar = new JButton("Entrar");
		btnEntrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ip = textField.getText();
				nome = textField_1.getText();
				porta = Integer.parseInt(textField_2.getText());
				ClienteGUI cliente = new ClienteGUI(nome);
				setVisible(false);
				
			}
		});
		
		JLabel lblIp = new JLabel("IP :");
		
		JLabel lblUsurio = new JLabel("Usu\u00E1rio :");
		
		textField_2 = new JTextField("5000");
		textField_2.setColumns(10);
		
		JLabel lblPorta = new JLabel("Porta :");
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap(255, Short.MAX_VALUE)
					.addComponent(btnEntrar)
					.addGap(54))
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGap(24)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addComponent(lblIp)
							.addGap(32))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addComponent(lblUsurio, GroupLayout.PREFERRED_SIZE, 53, GroupLayout.PREFERRED_SIZE)
							.addGap(11))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addComponent(lblPorta, GroupLayout.PREFERRED_SIZE, 53, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)))
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, 151, GroupLayout.PREFERRED_SIZE)
						.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 137, GroupLayout.PREFERRED_SIZE)
						.addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 66, GroupLayout.PREFERRED_SIZE))
					.addContainerGap(133, Short.MAX_VALUE))
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGap(46)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblIp)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(btnEntrar)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblUsurio))
					.addPreferredGap(ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
					.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
						.addComponent(textField_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblPorta))
					.addContainerGap())
		);
		contentPane.setLayout(gl_contentPane);
	}
}
R

:DIai? vc viu?

R

Alguem pode me dá uma dica de enviar os nomes de quem está conectado ,para ser exibido em uma textArea ou algo assim em cada cliente?

I

Cria uma lista de usuarios no servidor. No seu while(true), onde faz o server.accept(), vc adiciona o usuario que logar.
Ai vc pode criar uma thread para de tempos em tempos enviar essa lista para todos os usuários.

R

certo pelo codigo que eu postei não tinha como me mostrar?
obg.

R

Como eu posso enviar os nomes de cada cliente que está conectado para uma textArea de cada cliente?

Criado 21 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 9
Participantes 3