Java Socket Server and Client: Chat and Authorization Code Examples
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");
}
}
}