Buscar

Chat Básico em Java - Criação de chat básico para fixação do aprendizado em SOCKET e SERVERSOCKET.

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

6a437358-9381-4929-b3fe-30acf779c927
ChatBasico/src/com/ayrongabriel/chat/ChatCliente.java
package com.ayrongabriel.chat;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class ChatCliente extends JFrame {
	
	JTextField txtEnviar;
	PrintWriter escritor;
	Socket socket;
	JTextArea txtRecebido;
	Scanner leitor;
	String nome;
	
	public ChatCliente(){
		
	}
	
	public String getNome() {
		return nome;
	}
	@SuppressWarnings("unused")
	public ChatCliente(String nome){
		super("Chat : "+ nome);
		this.nome = nome;
		
		Font fonte = new Font("Serif", Font.PLAIN, 18);
		txtEnviar = new JTextField();
		txtEnviar.setFont(fonte);
		
		txtRecebido = new JTextArea();
		txtRecebido.setFont(fonte);
		
		JScrollPane scroll = new JScrollPane(txtRecebido);
		
		JButton botao = new JButton("Enviar");
		botao.setFont(fonte);
		botao.addActionListener(new enviarListener());
		
		Container painelEnvio = new JPanel();
		painelEnvio.setLayout(new BorderLayout());
		
		painelEnvio.add(BorderLayout.CENTER, txtEnviar);
		painelEnvio.add(BorderLayout.EAST, botao);
		
		getContentPane().add(BorderLayout.CENTER, txtRecebido);
		getContentPane().add(BorderLayout.SOUTH,painelEnvio);
		
		
		configRedes();
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500,500);
		setVisible(true);
	}
	
	private class escutaServidor implements Runnable{
		
		@Override
		public void run() {
			String texto;
			try {
				while((texto = leitor.nextLine()) != null){
					txtRecebido.append(texto + "\n");
				}
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro no ao escutar servidor","ERROR", JOptionPane.ERROR_MESSAGE);
			}
		}
		
	}
	
	public class enviarListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			escritor.println(nome.toUpperCase() +" : "+ txtEnviar.getText());
			escritor.flush();
			txtEnviar.setText("");
			txtEnviar.requestFocus();
		}
		
	}
	public void configRedes(){
		try{
			socket = new Socket("127.0.0.1", 5000);
			escritor = new PrintWriter(socket.getOutputStream());
			leitor = new Scanner(socket.getInputStream());
			new Thread(new escutaServidor()).start();
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "Servidor desconectado.\n"+"Contate o "+"Administrador".toUpperCase(),"Chat: "+nome,JOptionPane.ERROR_MESSAGE);
			System.exit(EXIT_ON_CLOSE);
		}
	}
	
	public static void main(String[] args) {
		
		new ChatCliente("Gabriel");
		new ChatCliente("Dayse");
	}
	public Socket getSocket() {
		return socket;
	}
}
ChatBasico/bin/com/ayrongabriel/chat/ChatCliente$escutaServidor.class
ChatBasico/bin/com/ayrongabriel/chat/ChatCliente$enviarListener.class
ChatBasico/ChatCliente.java
package com.ayrongabriel.redes;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class ChatCliente extends JFrame {
	
	JTextField txtEnviar;
	PrintWriter escritor;
	Socket socket;
	JTextArea txtRecebido;
	Scanner leitor;
	String nome;
	
	public ChatCliente(){
		
	}
	
	public String getNome() {
		return nome;
	}
	public ChatCliente(String nome){
		super("Chat : "+ nome);
		this.nome = nome;
		
		Font fonte = new Font("Serif", Font.PLAIN, 18);
		txtEnviar = new JTextField();
		txtEnviar.setFont(fonte);
		
		txtRecebido = new JTextArea();
		txtRecebido.setFont(fonte);
		
		JScrollPane scroll = new JScrollPane(txtRecebido);
		
		JButton botao = new JButton("Enviar");
		botao.setFont(fonte);
		botao.addActionListener(new enviarListener());
		
		Container painelEnvio = new JPanel();
		painelEnvio.setLayout(new BorderLayout());
		
		painelEnvio.add(BorderLayout.CENTER, txtEnviar);
		painelEnvio.add(BorderLayout.EAST, botao);
		
		getContentPane().add(BorderLayout.CENTER, txtRecebido);
		getContentPane().add(BorderLayout.SOUTH,painelEnvio);
		
		
		configRedes();
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500,500);
		setVisible(true);
	}
	
	private class escutaServidor implements Runnable{
		
		@Override
		public void run() {
			String texto;
			try {
				while((texto = leitor.nextLine()) != null){
					txtRecebido.append(texto + "\n");
				}
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro no ao escutar servidor","ERROR", JOptionPane.ERROR_MESSAGE);
			}
		}
		
	}
	
	public class enviarListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			escritor.println(nome.toUpperCase() +" : "+ txtEnviar.getText());
			escritor.flush();
			txtEnviar.setText("");
			txtEnviar.requestFocus();
		}
		
	}
	public void configRedes(){
		try{
			socket = new Socket("127.0.0.1", 5000);
			escritor = new PrintWriter(socket.getOutputStream());
			leitor = new Scanner(socket.getInputStream());
			new Thread(new escutaServidor()).start();
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "Servidor desconectado.\n"+"Contate o "+"Administrador".toUpperCase(),"Chat: "+nome,JOptionPane.ERROR_MESSAGE);
			System.exit(EXIT_ON_CLOSE);
		}
	}
	
	public static void main(String[] args) {
		
		new ChatCliente("Gabriel");
		new ChatCliente("Dayse");
	}
	public Socket getSocket() {
		return socket;
	}
}
ChatBasico/.project
 
	 ChatBasico
	 
	 
	
	 
		 
			 org.eclipse.jdt.core.javabuilder
			 
			
		
	
	 
		 org.eclipse.jdt.core.javanature
	
ChatBasico/.classpath
 
	 
	 
	 
ChatBasico/ChatServer.java
package com.ayrongabriel.redes;
import java.io.IOException;
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.JOptionPane;
public class ChatServer {
	
	List<PrintWriter> escritores = new ArrayList<>();
	public ChatServer() {
		ServerSocket servidor;
		try {
			servidor = new ServerSocket(5000);
			while(true){
				Socket socket = servidor.accept();
				new Thread(new escutaCliente(socket)).start();
				PrintWriter p = new PrintWriter(socket.getOutputStream());
				escritores.add(p);
			}
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Erro no socket. Servidor em execução.","SERVIDOR", JOptionPane.ERROR_MESSAGE);
		}
	}
	private void encaminharParaTodos(String texto){
		for (PrintWriter pw : escritores) {
			try {
				pw.println(texto);
				pw.flush();
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro no enviar das mensagem.","SERVIDOR", JOptionPane.ERROR_MESSAGE);
			}
		}
	}
	
	private class escutaCliente implements Runnable{
		Scanner leitor;
		public escutaCliente(Socket socket) {
			try {
				leitor = new Scanner(socket.getInputStream());
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro na escuta de dados.","SERVIDOR", JOptionPane.ERROR_MESSAGE);
			}
		}
		
		@Override
		public void run() {
			String texto;
			try {
				while((texto = leitor.nextLine())
!= null){
					System.out.println(texto);
					encaminharParaTodos(texto);
				}
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro na leitura de dados","SERVIDOR", JOptionPane.ERROR_MESSAGE);
			}
			
		}
		
	}
	
	public static void main(String[] args) {
		
		new ChatServer();
	}
}
ChatBasico/bin/com/ayrongabriel/chat/ChatCliente.class
ChatBasico/src/com/ayrongabriel/chat/ChatServer.java
package com.ayrongabriel.chat;
import java.io.IOException;
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.JOptionPane;
public class ChatServer {
	
	List<PrintWriter> escritores = new ArrayList<>();
	public ChatServer() {
		ServerSocket servidor;
		try {
			servidor = new ServerSocket(5000);
			while(true){
				Socket socket = servidor.accept();
				new Thread(new escutaCliente(socket)).start();
				PrintWriter p = new PrintWriter(socket.getOutputStream());
				escritores.add(p);
			}
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Erro no socket. Servidor em execução.","SERVIDOR", JOptionPane.ERROR_MESSAGE);
		}
	}
	private void encaminharParaTodos(String texto){
		for (PrintWriter pw : escritores) {
			try {
				pw.println(texto);
				pw.flush();
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro no enviar das mensagem.","SERVIDOR", JOptionPane.ERROR_MESSAGE);
			}
		}
	}
	
	private class escutaCliente implements Runnable{
		Scanner leitor;
		public escutaCliente(Socket socket) {
			try {
				leitor = new Scanner(socket.getInputStream());
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro na escuta de dados.","SERVIDOR", JOptionPane.ERROR_MESSAGE);
			}
		}
		
		@Override
		public void run() {
			String texto;
			try {
				while((texto = leitor.nextLine()) != null){
					System.out.println(texto);
					encaminharParaTodos(texto);
				}
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "Erro na leitura de dados","SERVIDOR", JOptionPane.ERROR_MESSAGE);
			}
			
		}
		
	}
	
	public static void main(String[] args) {
		
		new ChatServer();
	}
}
ChatBasico/bin/com/ayrongabriel/chat/ChatServer.class
ChatBasico/bin/com/ayrongabriel/chat/ChatServer$escutaCliente.class

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais

Materiais relacionados

Perguntas Recentes