Ciência da Computação APS 5º Semestre
Por: Kleber.Oliveira • 3/5/2018 • 1.536 Palavras (7 Páginas) • 302 Visualizações
...
A proposta do projeto é apresentar duas aplicações Java, uma sendo o servidor e a outra o cliente do chat. A aplicação cliente pode ser executada por diversos usuários desde que, o servidor esteja rodando para gerenciar a troca das mensagens.
Para a conexão do cliente é necessário que o usuário escolha um nome para entrar no chat , não sendo necessário colocar o ip e a porta do servidor, exceto em casos específicos que necessitem apontar essas informações.
4.1. Servidor Chat
O servidor servirá como a unidade centralizadora de todas as conexões recebidas via socket e tera a responsabilidade de controlar e enviar as mensagens para todos os demais clientes conectados. Quando um cliente se conecta, ele mesmo cria uma thread para aquele cliente, ou seja, terá a sua respectiva Thread e o servidor fará a gestão disso.
A inicialização do servidor é indispensável para o correto funcionamento da aplicação, pois o cliente se conecta através de um ip e porta, no caso desta, localhost e porta 5000 para executar na mesma máquina para testes.
Caso o servidor não esteja executando, será rejeitada a conexão e o cliente não conseguirá conectar nem enviar mensagens.
4.2. Cliente Chat
O cliente servirá como tela de interação com o usuário do chat. Nela o usuário colocará seu nome, e em casos específicos, terá que colocar endereço ip e porta do servidor. Por padrão a aplicação conecta em localhost porta 5000.
Cada usuário criará uma instância do cliente e solicitará uma conexão com o servidor socket. Caso aprovada, ele se conecta e pode enviar e receber mensagens dos demais clientes conectados so servidor.
Para enviar as mensagens o usuário, após se conectar ao servidor, deverá digitar a mensagem no campo correspondente e clicar em enviar. Instantaneamente a mensagem é enviada para o servidor e ele enviar à todos os demais usuários conectados ao chat.
5. RELATÓRIO LINHAS DE CÓDIGO
ClienteChat.java
package classes;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JOptionPane;
public class ClienteChat extends javax.swing.JFrame {
//Socket usado para a ligação
private Socket socket;
//Streams de leitura e escrita. A de leitura é usada para receber os dados do
//servidor, enviados pelos outros clientes. A de escrita para enviar os dados
//para o servidor.
private DataInputStream din;
private DataOutputStream dout;
//apenas para que o utilizador não altere o nick a meio da conversa
private String nick;
/** Creates new form ClienteChat */
public ClienteChat() {
initComponents();
}
public void ligar() {
try {
nick = jtfNick.getText().trim();
jtaMensagens.append(": Conectando...\n");
String host = jtfEndereco.getText().trim();
int port = Integer.parseInt(jffPorto.getText().trim());
//criar o socket
socket = new Socket(host, port);
//como não ocorreu uma excepção temos um socket aberto
jtaMensagens.append(": Conexão estabelecida...\n");
//Vamos obter as streams de comunicação fornecidas pelo socket
din = new DataInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());
//e iniciar a thread que vai estar constantemente à espera de novas
//mensages. Se não usassemos uma thread, não conseguiamos receber
//mensagens enquanto estivessemos a escrever e toda a parte gráfica
//ficaria bloqueada.
new Thread(new Runnable() {
//estamos a usar uma classe anónima...
public void run() {
try {
while (true) {
//sequencialmente, ler as mensagens uma a uma e acrescentar ao
//texto que já recebemos
//para o utilizador ver
jtaMensagens.append(din.readUTF() + "\n");
}
} catch (IOException ex) {
jtaMensagens.append(": " + ex.getMessage());
}
}
}).start();
} catch (IOException ex) {
jtaMensagens.append(": " + ex.getMessage());
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
*
...