Java Socket Server and Client: Chat and Authorization Code Examples

Design and engineering4.82 KB

Multi-Client Chat Server and Client in Java

LeitorServidor (Server Reader)

public class LeitorServidor implements Runnable {

private Scanner entrada;
ArrayList<Socket> clientes;
LeitorServidor(InputStream inputStream, ArrayList<Socket> clientes) {
   this.entrada = new Scanner(inputStream);
   this.clientes = clientes;
}
public void run() {
   while (entrada.hasNextLine()) {
     String mensagem = entrada.nextLine();
     for (int i = 0; i < clientes.size(); i++) {
        try {
          new PrintStream(clientes.get(i).getOutputStream()).println(mensagem);
        } catch (IOException ex) {
============================

LeitorCliente (Client Reader)

public class LeitorCliente implements Runnable {

private Scanner entrada;
LeitorCliente(InputStream stream) {
   this.entrada = new Scanner(stream);
}
public void run() {
   while (entrada.hasNextLine()) {
     System.out.println(entrada.nextLine());
   }
}
============================

Cliente (Client)

public class Cliente {

    public static void main(String[] args) throws IOException {
        Socket cliente = new Socket("127.0.0.1", 10001);
        LeitorCliente leitor; // Buffer de Leitura
        leitor = new LeitorCliente(cliente.getInputStream());
        new Thread(leitor).start();
        Scanner entrada = new Scanner(System.in);
        PrintStream saida = new PrintStream(cliente.getOutputStream());
        while (entrada.hasNextLine()) {
            saida.println(entrada.nextLine());
        }
}
============================

Servidor (Server)

public class Servidor {

    public static void main(String[] args) throws IOException {
        ServerSocket servidor = new ServerSocket(10001);
        ArrayList<Socket> clientes = new ArrayList<Socket>();
        while (true) {
            Socket cliente = servidor.accept();
            clientes.add(cliente);
            LeitorServidor leitor = new LeitorServidor(cliente.getInputStream(), clientes);
            new Thread(leitor).start();
        }
}
============================

Atendente (Attendant)

public class Atendente implements Runnable {

private Servico servico;
public Atendente(Socket requisitor) {
   servico = new Servico(requisitor);
}
public void run() {
   servico.execute();
}
}
============================

Conector (Connector)

public class Conector {

{...} private String ip; private int porta;
private String secKey;
public boolean autorizar(String usuario, String senha) throws IOException {
   Socket con = new Socket(ip, porta);
   Scanner entrada = new Scanner(con.getInputStream());
   PrintStream saida = new PrintStream(con.getOutputStream());
   saida.println(usuario);
   saida.println(senha);
   if (!entrada.nextLine().equals("ACK")) return false;
   saida.println("secKey");
   if (!entrada.nextLine().equals("ACK")) return false;
   return true;
}
============================

Autorizador (Authorizer)

public class Autorizador {

{...} private int porta;
private String _secKey;
private boolean continuar = true;
public void autorizar() {
   ServerSocket serv = new ServerSocket(porta);
   while (continuar) {
     Socket con = serv.accept();
     Scanner entrada = new Scanner(con.getInputStream());
     if (entrada.nextLine().equals(secKey)) {
       saida.println("ACK");
     } else {
       saida.println("NACK");
     }
     if (new DAOCon().autorizar(entrada.nextLine(), entrada.nextLine())) {
       saida.println("ACK");
     } else {
       saida.println("NACK");
     }
   }
}

Download

PDF Word HTML