Buscar

APS Ciêcia da computaçaõ

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 59 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 59 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 59 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Paulista 
Ciência da Computação 
 
 
 
 
 
DESENVOLVIMENTO DE CHAT EM GRUPO 
 
 DENILSON ABDON – N459FH4 
 
 
 
 
 
 
 
 
 
 
Manaus – Am 
2021 
 
DESENVOLVIMENTO DE CHAT EM GRUPO 
 
 
 
 
 
 DENILSON ABDON – N459FH4 
 
 
 
 
 
Atividade prática 
supervisionada e apresentada 
ao curso Ciência da 
Computação, para fins de 
conhecimento na área. 
Orientador: Prof: Elimar Vina 
 
 
Manaus – Am 
2021 
 
 
Sumario 
Objetivo................................................................................................4 
Geral.....................................................................................................4 
1.2 Específicos ...................................................................................4 
2 Introdução........................................................................................4 
3 Rede de computadores....................................................................5 
3.1 definição.........................................................................................5 
3.2 Aplicações comerciais...................................................................5 
3.2 Aplicações comerciais...................................................................6 
3.3 Aplicações Domésticas..................................................................6 
4 Comunicação Dados..........................................................................6 
4.1 Eficiência..........................................................................................7 
5 Transmissão de Dados......................................................................8 
5.1 Sentido da Transmissão.................................................................9 
5.2 Modos de Transmissão..................................................................10 
5.3 Sincronização..................................................................................12 
6 CONTRIBUIÇÃO DO TRABALHO NA NOSSA FORMAÇÃO............13 
8 Relatório com as linhas de código do 
programa..........................................................................................................13 
9 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO EM UM 
COMPUTADOR.................................................................................................57 
10 referencias........................................................................................58 
 
 
 
4 
1 Objetivos 
1.1 Geral 
Pesquisar e dissertar sobre fundamentos da comunicação de dados em 
rede. 
1.2 Específicos 
 Pesquisar e dissertar sobre os conceitos gerais de Rede de 
computadores. 
 Pesquisar e dissertar sobre Comunicação de Dados. 
 Pesquisar e dissertar sobre Transmissão de Dados. 
2 Introdução 
 Os computadores são máquinas que manipulam dados e informações. 
A computação envolve o estudo de como a informação é organizada, 
manipulada e usada em um computador. 
Um aspecto marcante da sociedade atual é a automação de tarefas, e 
na ciência da computação existe um processo de desenvolvimento simultâneo 
e interativo de máquinas e elementos lógicos que gerenciam a execução 
automática de uma tarefa. 
Entre os anos 70 e 80 fusão dos campos de comunicação informática e 
dados e isso trouxe vários fatos importantes. Em empresas, escolas e muitos 
outros tipos de organização, redes de comunicação de dados, em seus vários 
tipos de vantagens: 
Permitindo acesso simultâneo a programas e dados importantes; 
Permitir que as pessoas compartilhem dispositivos periféricos; 
Para facilitar o processo de realização de reserva (backup); 
 
5 
Comunicações pessoais flaginianas com correio eletrônico ou 
mensagens imediatas; 
A indústria de computadores, portanto, falando, teve progresso 
espetacular em um curto período de tempo e redes de comunicação, também 
fazem parte desse crescimento com um papel fundamental nos processos de 
comunicação para o mundo globalizado. 
 
 
3 Rede de computadores 
3.1 definição 
No computador e telecomunicações, há um conjunto de dois ou mais 
dispositivos de computação eletrônica (ou módulos de rede de rede ou nódulos 
de rede) interligados por um sistema de comunicação digital (ou link de dados), 
guiado por um conjunto de regras para compartilhar um com o outro. , Serviços 
e recursos físicos e lógicos. 
Isso pode ser como: dados, impressoras, mensagens (e-mails), entre 
outros. As conexões podem ser estabelecidas usando suportes de cabo ou 
mídia sem fio. 
Dispositivos em uma rede de computadores, que rota e terminam os 
dados, são chamados de "Nódulos de rede" (ponto de conexão), que podem 
incluir hosts, como: computadores pessoais, telefones, servidores e hardware 
de rede também. Dois desses dispositivos podem ser ditas "redes" quando um 
dispositivo pode trocar informações com o outro dispositivo, Se você tiver uma 
conexão direta entre sim ou não. 
O exemplo mais comum de redes de computadores é: Internet; Intranet 
de uma empresa; Rede doméstica local; entre outros. 
3.2 Aplicações comerciais 
6 
A necessidade de compartilhar entre as pessoas da informação da 
empresa ou até mesmo entre computadores, coloca redes de computadores 
em evidências. Quando falamos sobre aplicativos comerciais, a palavra-chave 
é a troca de recursos Todos os membros de uma rede de computadores 
profissionais devem ter acesso a dados e equipamentos, independentemente 
de seus recursos físicos de localização e cálculo. 
Um cenário clássico que descreve muito bem a troca de recursos é a de 
uma empresa onde cada funcionário tem um pequeno tamanho de impressora 
pequeno, é claro que uma ou mais impressoras de maior participação 
compartilhada entre funcionários seriam mais vantajosas. Para privatizar 
individualmente. Unidade para todos, porque tudo nem todos usam na mesma 
frequência e não é mais necessário gastar tanto a recusa financeira de comprar 
e manter impressoras individuais. 
 
3.3 Aplicações Domésticas 
 
O acesso à Internet também permite que os usuários acessem o 
computador (servidor) para operações eletrônicas em computadores que se 
comuniquem com outras pessoas em redes sociais, serviços de aluguel, jornais 
publicados, compram livros digitalmente. 
O usuário também pode procurar algo que lhe interessa como: notícias e 
informações sobre política, famosa saúde, entretenimento e educação. Você 
também pode usar a rede para o seu tempo livre, por exemplo: Jogos, receitas 
culinárias, esportes e filmes/séries, incluindo as possibilidades infinitas de 
conteúdo e atividades a serem encontradas pela rede mundial. 
4 Comunicação Dados 
A comunicação de dados é uma disciplina na área de "Ciência da 
Computação", que lida com a transferência de informações entre os sistemas 
de cálculo e vários dispositivos por meio de um meio de transmissão. 
 
7 
A transmissão de informações requer o passo de sinais pela 
comunicação de comunicação física que as redes são compostas. 
4.1 Eficiência 
Quando falamos sobre a eficiência de um sistema de comunicação de 
dados, é necessário conhecer 3 características fundamentais:Serviço de 
Entrega, Confiabilidade e Tempo de Atraso. 
Entrega: Os dados só devem ser recebidos pelo dispositivo de destino 
ou pelo usuário, ou seja, o sistema deve enviar os dados para o destino 
correto. 
Confiabilidade: Os dados modificados ou danificados em uma 
transmissão são mal úteis, o sistema deve, portanto, garantir a entrega dos 
dados. 
Tempo de atraso: os dados atrasados não são úteis. Por exemplo, em 
transmissões multimídia, como vídeo, não são desejáveis, para que eles sejam 
entregues virtualmente com o mesmo tempo em que foram produzidos, isto é, 
sem atraso significativo. Nesse caso, o sistema deve fornecer dados em um 
tempo predeterminado e evitar atrasos máximos. 
Componentes 
Para que a comunicação seja realizada, o processo é composto 
de elementos básicos, sãoestes: 
 Mensagem: é a informação a ser transmitida. Pode ser 
constituída de texto, números, figuras, áudio e vídeo – ou qualquer 
combinação desses; 
 Transmissor (TX): é o dispositivo que envia a mensagem de 
dados. Pode ser um computador, uma estação de trabalho, um telefone, 
uma câmera de vídeo e assim por diante; 
 Receptor (RX): é o dispositivo que recebe a mensagem. Pode ser 
um computador, uma estação de trabalho, um telefone, uma câmera de 
vídeo e assim por diante; 
8 
 Meio de Transmissão: é o caminho físico por onde viaja uma 
mensagem originada e dirigida ao receptor; 
 Protocolo: é um conjunto de regras que governa a comunicação 
de dados. Ele representa um acordo entre os dispositivos que se 
comunicam. 
 
 
5 Transmissão de Dados 
A transmissão de dados é um material cada vez mais importante para 
qualquer pessoa que opera com equipamentos inseridos em um sistema de 
comunicação, que explora módulos ou técnicas, através da qual a informação é 
transmitida. Para uma transmissão dada a um caminho de comunicação entre 
duas máquinas, a comunicação pode ser realizada de maneiras diferentes, 
configurando: 
 Sentido da Transmissão (Trocas): 
 Simples; 
 Half-duplex; 
 Full-duplex. 
 Modo de Transmissão (Meio). Trata-se do número de bits 
enviadas simultaneamente: 
 Paralela; 
 Serial. 
 Sincronização (Tipos). Trata-se da sincronização entre emissor e 
receptor: 
 Síncrono; 
 Assíncrono 
9 
5.1 Sentido da Transmissão 
O sentido de transmissão (ou sentido das trocas) entre dois dispositivos 
em redes pode acontecer de três maneiras diferentes: Simplex, Half-
duplex ou Full-duplex. 
 
Simplex: é que existe apenas um transmissor e um receptor. A 
comunicação é unidirecional, como em uma única estrada. Apenas um dos dois 
dispositivos de links é capaz de transmitir, então o outro só pode receber. Por 
exemplo, temos TV e TV Rádio e transmissão FM, onde só podemos receber 
dados enviados pelo receptor e não interagir com o sistema. 
 
 
Half-duplex: Cada estação pode ser transmitida e recebida neste modo, 
mas nunca simultaneamente. Quando um dispositivo transmite, recebe e vice-
versa o outro. Em uma transmissão semi-duplex, toda a capacidade do canal é 
dada ao dispositivo atualmente transmissor. Por exemplo, temos uma 
comunicação, por exemplo, através de uma caminhada e o rádio Nextel. 
 
 
 
Full-duplex: Desta forma, ambas as estações podem ser transmitidas e 
recebidas ao mesmo tempo, isto é, ao mesmo tempo. Sinais em direções 
opostas compartilham a capacidade da esquerda ou 
 
 
 
10 
canal. Como exemplo, temos comunicação sobre um celular no qual 
podemos conversar e ouvir ao mesmo tempo. 
 
 
 
5.2 Modos de Transmissão 
O modo de transmissão indica o número de unidades de informação 
elementar (bit) que podem ser transmitidas simultaneamente através do canal 
de comunicação, ou seja, é diretamente, a quantidade de bits a ser transmitida 
ao mesmo tempo. 
Transmissão em modo Paralelo: Na transmissão do modo paralelo, 
os bits que compõem o caractere são enviados simultaneamente através 
de vários caminhos de dados. Um caminho é, por exemplo, um fio, um 
cabo ou qualquer outro suporte físico. A conexão paralela dos 
computadores do tipo PC geralmente requer 10 fios. A imagem abaixo, 
exemplifica o modo de transmissão. 
 
 
 
11 
Exemplos: LPT1, LPT2, IDE, SCSI, PCI. 
 
 
Estas vias podem ser : 
 N linhas físicas: neste caso, cada bit é enviado para uma linha 
física (é a razão pela qual os cabos paralelos são compostos de vários fios 
em cobertura); 
 uma linha física dividida em vários sub-canais compartilhando a 
mesma banda. Assim, cada bit é transmitido numa frequência diferente. 
Dado que os fios condutores estão próximos numa cobertura, existem 
perturbações / interferências que degradam a qualidade do sinal. 
 
 Transmissão em modo Série: Na transmissão em modo série, 
os bits que compõem a informação são enviados um a um através de uma 
única via de dados. 
 
Exemplos: USB, Sata (Serial Ata), SaS, PCI-Express. 
 
 
 
 
12 
 
5.3 Sincronização 
Problemas de dados com transmissão paralela estão no modo serial que 
é mais comumente usado. No entanto, como é apenas um fio único que 
transporta as informações, há um problema de sincronização entre o emissor e 
o receptor, isto é, o receptor não pode distinguir os caracteres a priori (ou ainda 
mais as sequências de mordida) porque os bits são enviados sucessivamente. 
Em seguida, há dois tipos de transmissão que permitem remediar este 
problema: Síncrona e Assíncrona. 
 
Transmissão Assíncrona:, os dados são enviados sem controle de 
tempo intermediário e outros. Agora imagine que apenas um pouco é 
transmitido durante um longo silêncio no qual o destinatário não sabia que era 
00010000 ou 10000. 000 ou 10000. 000 ou até 00000010. Para resolver esse 
problema, todas as informações sobre informações são avançadas que inicia o 
começo de indicar a distribuição dele (a informação inicial do surto é chamada 
de bits start) e termina com a transmissão de informações finais (chamadas 
Bits stop, várias paradas podem estar presentes). Normalmente, se o receptor 
não estiver estabelecido no receptor, nenhum mecanismo de sincronização em 
relação ao editor. 
 Características: 
 Baixo Rendimento (alto overhead). 
 
13 
 Fácil Implementação; 
 Baixa Velocidade; 
 Transmissão Síncrono: Na transmissão em modo Síncrono os 
dados são enviados em blocos e em intervalos de tempo definidos, dados 
de sincronismo são enviados durante a transmissão para manter o 
sincronismo entre as máquinas. O receptor recebe continuamente (mesmo 
quando nenhum bit é transmitido) as informações ao ritmo em que o 
emissor as envia. É por isso é necessário que emissor e receptor estejam 
sincronizados à mesma velocidade. Além disso, informações 
suplementares são inseridas para garantir a ausência de erros na 
transmissão. 
 Características: 
 Boa qualidade de transmissão; 
 Custo de transmissão mais elevado; 
 Equipamento mais sofisticado; 
 Ideais para transmissão de sinais sensíveis a atraso (voz, 
música, vídeo); 
 Transmissão com maior confiabilidade; 
 Adequado para aplicações multimídia. 
 
6 CONTRIBUIÇÃO DO TRABALHO NA NOSSA FORMAÇÃO 
 Este trabalho permitiu colocar em prática o conteúdo aprendido durante 
o curso de Ciência da Computação. Desde a fase ainda teórica, onde são 
buscados os requisitos do programa, o que ele deve ou não deve fazer, os 
erros que devem ser tratados e qual será a lógica utilizada no programa. 
7. RELATÓRIO COM AS LINHAS DE CÓDIGO DO PROGRAMA 
package chat_server; 
 
import java.io.*; 
14 
import java.net.*; 
import java.util.*; 
 
public class server_frame extends javax.swing.JFrame 
{ 
 ArrayList clientOutputStreams; 
 ArrayList<String> users; 
 
 public class ClientHandler implements Runnable 
 { 
 BufferedReader reader; 
 Socket sock; 
 PrintWriter client; 
 
 public ClientHandler(Socket clientSocket, PrintWriter user) 
 { 
 client = user; 
 try 
 { 
15 
 sock = clientSocket; 
 InputStreamReader isReader = new 
InputStreamReader(sock.getInputStream()); 
 reader = new BufferedReader(isReader); 
 } 
 catch (Exception ex) 
 { 
 ta_chat.append("Unexpected error... \n"); 
 } 
 
 } 
 
 @Override 
 public void run() 
 { 
 String message, connect = "Connect", disconnect = "Disconnect", 
chat = "Chat" ; 
 String[] data; 
 
 try 
16 
 { 
 while ((message = reader.readLine()) != null) 
 { 
 ta_chat.append("Received: " + message + "\n"); 
 data = message.split(":");for (String token:data) 
 { 
 ta_chat.append(token + "\n"); 
 } 
 
 if (data[2].equals(connect)) 
 { 
 tellEveryone((data[0] + ":" + data[1] + ":" + chat)); 
 userAdd(data[0]); 
 } 
 else if (data[2].equals(disconnect)) 
 { 
 tellEveryone((data[0] + ":has disconnected." + ":" + chat)); 
17 
 userRemove(data[0]); 
 } 
 else if (data[2].equals(chat)) 
 { 
 tellEveryone(message); 
 } 
 else 
 { 
 ta_chat.append("No Conditions were met. \n"); 
 } 
 } 
 } 
 catch (Exception ex) 
 { 
 ta_chat.append("Lost a connection. \n"); 
 ex.printStackTrace(); 
 clientOutputStreams.remove(client); 
 } 
 } 
18 
 } 
 
 public server_frame() 
 { 
 initComponents(); 
 } 
 
 @SuppressWarnings("unchecked") 
 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
 private void initComponents() { 
 
 jScrollPane1 = new javax.swing.JScrollPane(); 
 ta_chat = new javax.swing.JTextArea(); 
 b_start = new javax.swing.JButton(); 
 b_end = new javax.swing.JButton(); 
 b_users = new javax.swing.JButton(); 
 b_clear = new javax.swing.JButton(); 
 lb_name = new javax.swing.JLabel(); 
 
19 
 
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
 setTitle("Chat - Server's frame"); 
 setName("server"); // NOI18N 
 setResizable(false); 
 
 ta_chat.setColumns(20); 
 ta_chat.setRows(5); 
 jScrollPane1.setViewportView(ta_chat); 
 
 b_start.setText("START"); 
 b_start.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_startActionPerformed(evt); 
 } 
 }); 
 
 b_end.setText("END"); 
 b_end.addActionListener(new java.awt.event.ActionListener() { 
 
20 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_endActionPerformed(evt); 
 } 
 }); 
 
 b_users.setText("Online Users"); 
 b_users.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_usersActionPerformed(evt); 
 } 
 }); 
 
 b_clear.setText("Clear"); 
 b_clear.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_clearActionPerformed(evt); 
 } 
 }); 
 
21 
 lb_name.setText("TechWorld3g"); 
 
lb_name.setBorder(javax.swing.BorderFactory.createLineBorder(new 
java.awt.Color(0, 0, 0))); 
 
 javax.swing.GroupLayout layout = new 
javax.swing.GroupLayout(getContentPane()); 
 getContentPane().setLayout(layout); 
 layout.setHorizontalGroup( 
 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
 .addGroup(layout.createSequentialGroup() 
 .addContainerGap() 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING) 
 .addComponent(jScrollPane1) 
 .addGroup(layout.createSequentialGroup() 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING, false) 
 
 
22 
 .addComponent(b_end, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
 .addComponent(b_start, 
javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 
291, Short.MAX_VALUE) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING, false) 
 .addComponent(b_clear, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
 .addComponent(b_users, 
javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)))) 
 .addContainerGap()) 
 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
layout.createSequentialGroup() 
 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, 
Short.MAX_VALUE) 
 .addComponent(lb_name) 
 .addGap(209, 209, 209)) 
 ); 
23 
 layout.setVerticalGroup( 
 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
 .addGroup(layout.createSequentialGroup() 
 .addContainerGap() 
 .addComponent(jScrollPane1, 
javax.swing.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE) 
 .addGap(18, 18, 18) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BA
SELINE) 
 .addComponent(b_start) 
 .addComponent(b_users)) 
 .addGap(18, 18, 18) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BA
SELINE) 
 .addComponent(b_clear) 
 .addComponent(b_end)) 
 .addGap(4, 4, 4) 
 .addComponent(lb_name)) 
 ); 
24 
 
 pack(); 
 }// </editor-fold> 
 
 private void b_endActionPerformed(java.awt.event.ActionEvent evt) { 
 try 
 { 
 Thread.sleep(5000); //5000 milliseconds is five second. 
 } 
 catch(InterruptedException ex) {Thread.currentThread().interrupt();} 
 
 tellEveryone("Server:is stopping and all users will be 
disconnected.\n:Chat"); 
 ta_chat.append("Server stopping... \n"); 
 
 ta_chat.setText(""); 
 } 
 
 private void b_startActionPerformed(java.awt.event.ActionEvent evt) { 
 Thread starter = new Thread(new ServerStart()); 
25 
 starter.start(); 
 
 ta_chat.append("Server started...\n"); 
 } 
 
 private void b_usersActionPerformed(java.awt.event.ActionEvent evt) { 
 ta_chat.append("\n Online users : \n"); 
 for (String current_user : users) 
 { 
 ta_chat.append(current_user); 
 ta_chat.append("\n"); 
 } 
 
 } 
 
 private void b_clearActionPerformed(java.awt.event.ActionEvent evt) { 
 ta_chat.setText(""); 
 } 
 
26 
 public static void main(String args[]) 
 { 
 java.awt.EventQueue.invokeLater(new Runnable() 
 { 
 @Override 
 public void run() { 
 new server_frame().setVisible(true); 
 } 
 }); 
 } 
 
 public class ServerStart implements Runnable 
 { 
 @Override 
 public void run() 
 { 
 clientOutputStreams = new ArrayList(); 
 users = new ArrayList();27 
 try 
 { 
 ServerSocket serverSock = new ServerSocket(2222); 
 
 while (true) 
 { 
 Socket clientSock = serverSock.accept(); 
 PrintWriter writer = new 
PrintWriter(clientSock.getOutputStream()); 
 clientOutputStreams.add(writer); 
 
 Thread listener = new Thread(new 
ClientHandler(clientSock, writer)); 
 listener.start(); 
 ta_chat.append("Got a connection. \n"); 
 } 
 } 
 catch (Exception ex) 
 { 
 ta_chat.append("Error making a connection. \n"); 
28 
 } 
 } 
 } 
 
 public void userAdd (String data) 
 { 
 String message, add = ": :Connect", done = "Server: :Done", name 
= data; 
 ta_chat.append("Before " + name + " added. \n"); 
 users.add(name); 
 ta_chat.append("After " + name + " added. \n"); 
 String[] tempList = new String[(users.size())]; 
 users.toArray(tempList); 
 
 for (String token:tempList) 
 { 
 message = (token + add); 
 tellEveryone(message); 
 } 
 tellEveryone(done); 
29 
 } 
 
 public void userRemove (String data) 
 { 
 String message, add = ": :Connect", done = "Server: :Done", name 
= data; 
 users.remove(name); 
 String[] tempList = new String[(users.size())]; 
 users.toArray(tempList); 
 
 for (String token:tempList) 
 { 
 message = (token + add); 
 tellEveryone(message); 
 } 
 tellEveryone(done); 
 } 
 
 public void tellEveryone(String message) 
 { 
30 
 Iterator it = clientOutputStreams.iterator(); 
 
 while (it.hasNext()) 
 { 
 try 
 { 
 PrintWriter writer = (PrintWriter) it.next(); 
 writer.println(message); 
 ta_chat.append("Sending: " + message + "\n"); 
 writer.flush(); 
 ta_chat.setCaretPosition(ta_chat.getDocument().getLength()); 
 
 } 
 catch (Exception ex) 
 { 
 ta_chat.append("Error telling everyone. \n"); 
 } 
 } 
 } 
 31 
 // Declaração de variáveis 
 private javax.swing.JButton b_clear; 
 private javax.swing.JButton b_end; 
 private javax.swing.JButton b_start; 
 private javax.swing.JButton b_users; 
 private javax.swing.JScrollPane jScrollPane1; 
 private javax.swing.JLabel lb_name; 
 private javax.swing.JTextArea ta_chat; 
 // Fim da declaração de variáveis 
} 
 
package chat_client; 
 
import java.net.*; 
import java.io.*; 
import java.util.*; 
 
public class client_frame extends javax.swing.JFrame 
{ 
 String username, address = "localhost"; 
32 
 ArrayList<String> users = new ArrayList(); 
 int port = 2222; 
 Boolean isConnected = false; 
 
 Socket sock; 
 BufferedReader reader; 
 PrintWriter writer; 
 
 
 
 public void ListenThread() 
 { 
 Thread IncomingReader = new Thread(new IncomingReader()); 
 IncomingReader.start(); 
 } 
 
 
 public void userAdd(String data) 
 { 
33 
 users.add(data); 
 } 
 
 public void userRemove(String data) 
 { 
 ta_chat.append(data + " is now offline.\n"); 
 } 
 
 
 public void writeUsers() 
 { 
 String[] tempList = new String[(users.size())]; 
 users.toArray(tempList); 
 for (String token:tempList) 
 { 
 //users.append(token + "\n"); 
 } 
 } 
 
 34 
 public void sendDisconnect() 
 { 
 String bye = (username + ": :Disconnect"); 
 try 
 { 
 writer.println(bye); 
 writer.flush(); 
 } catch (Exception e) 
 { 
 ta_chat.append("Could not send Disconnect message.\n"); 
 } 
 } 
 
 
 public void Disconnect() 
 { 
 try 
 { 
 ta_chat.append("Disconnected.\n"); 
35 
 sock.close(); 
 } catch(Exception ex) { 
 ta_chat.append("Failed to disconnect. \n"); 
 } 
 isConnected = false; 
 tf_username.setEditable(true); 
 
 } 
 
 public client_frame() 
 { 
 initComponents(); 
 } 
 
 
 public class IncomingReader implements Runnable 
 { 
 @Override 
 public void run() 
36 
 { 
 String[] data; 
 String stream, done = "Done", connect = "Connect", disconnect = 
"Disconnect", chat = "Chat"; 
 
 try 
 { 
 while ((stream = reader.readLine()) != null) 
 { 
 data = stream.split(":"); 
 
 if (data[2].equals(chat)) 
 { 
 ta_chat.append(data[0] + ": " + data[1] + "\n"); 
 
ta_chat.setCaretPosition(ta_chat.getDocument().getLength()); 
 } 
 else if (data[2].equals(connect)) 
 { 
 ta_chat.removeAll(); 
37 
 userAdd(data[0]); 
 } 
 else if (data[2].equals(disconnect)) 
 { 
 userRemove(data[0]); 
 } 
 else if (data[2].equals(done)) 
 { 
 //users.setText(""); 
 writeUsers(); 
 users.clear(); 
 } 
 } 
 }catch(Exception ex) { } 
 } 
 } 
 
 
 @SuppressWarnings("unchecked") 
38 
 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
 private void initComponents() { 
 
 lb_address = new javax.swing.JLabel(); 
 tf_address = new javax.swing.JTextField(); 
 lb_port = new javax.swing.JLabel(); 
 tf_port = new javax.swing.JTextField(); 
 lb_username = new javax.swing.JLabel(); 
 tf_username = new javax.swing.JTextField(); 
 lb_password = new javax.swing.JLabel(); 
 tf_password = new javax.swing.JTextField(); 
 b_connect = new javax.swing.JButton(); 
 b_disconnect = new javax.swing.JButton(); 
 b_anonymous = new javax.swing.JButton(); 
 jScrollPane1 = new javax.swing.JScrollPane(); 
 ta_chat = new javax.swing.JTextArea(); 
 tf_chat = new javax.swing.JTextField(); 
 b_send = new javax.swing.JButton(); 
 lb_name = new javax.swing.JLabel(); 
39 
 jInternalFrame1 = new javax.swing.JInternalFrame(); 
 
 
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
 setTitle("Chat - Client's frame"); 
 setName("client"); // NOI18N 
 setResizable(false); 
 
 lb_address.setText("Address : "); 
 
 tf_address.setText("localhost"); 
 tf_address.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 tf_addressActionPerformed(evt); 
 } 
 }); 
 
 lb_port.setText("Port :"); 
 
 tf_port.setText("2222"); 
40 
 tf_port.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 tf_portActionPerformed(evt); 
 } 
 }); 
 
 lb_username.setText("Username :"); 
 
 tf_username.addActionListener(new java.awt.event.ActionListener() 
{ 
 public void actionPerformed(java.awt.event.ActionEvent evt) {tf_usernameActionPerformed(evt); 
 } 
 }); 
 
 lb_password.setText("Password : "); 
 
 b_connect.setText("Connect"); 
 b_connect.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
41 
 b_connectActionPerformed(evt); 
 } 
 }); 
 
 b_disconnect.setText("Disconnect"); 
 b_disconnect.addActionListener(new 
java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_disconnectActionPerformed(evt); 
 } 
 }); 
 
 b_anonymous.setText("Anonymous Login"); 
 b_anonymous.addActionListener(new 
java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_anonymousActionPerformed(evt); 
 } 
 }); 
 
42 
 ta_chat.setColumns(20); 
 ta_chat.setRows(5); 
 jScrollPane1.setViewportView(ta_chat); 
 
 b_send.setText("SEND"); 
 b_send.addActionListener(new java.awt.event.ActionListener() { 
 public void actionPerformed(java.awt.event.ActionEvent evt) { 
 b_sendActionPerformed(evt); 
 } 
 }); 
 
 lb_name.setText("TechWorld3g"); 
 
lb_name.setBorder(javax.swing.BorderFactory.createLineBorder(new 
java.awt.Color(0, 0, 0))); 
 
 jInternalFrame1.setVisible(true); 
 
 javax.swing.GroupLayout jInternalFrame1Layout = new 
javax.swing.GroupLayout(jInternalFrame1.getContentPane()); 
 43 
jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout); 
 jInternalFrame1Layout.setHorizontalGroup( 
 
jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING) 
 .addGap(0, 0, Short.MAX_VALUE) 
 ); 
 jInternalFrame1Layout.setVerticalGroup( 
 
jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING) 
 .addGap(0, 4, Short.MAX_VALUE) 
 ); 
 
 javax.swing.GroupLayout layout = new 
javax.swing.GroupLayout(getContentPane()); 
 getContentPane().setLayout(layout); 
 layout.setHorizontalGroup( 
 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
 .addGroup(layout.createSequentialGroup() 
 .addContainerGap() 
44 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING) 
 .addGroup(layout.createSequentialGroup() 
 .addComponent(tf_chat, 
javax.swing.GroupLayout.PREFERRED_SIZE, 352, 
javax.swing.GroupLayout.PREFERRED_SIZE) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
 .addComponent(b_send, 
javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE)) 
 .addComponent(jScrollPane1) 
 .addGroup(layout.createSequentialGroup() 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TR
AILING, false) 
 .addComponent(lb_username, 
javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE) 
 .addComponent(lb_address, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
 .addGap(18, 18, 18) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING, false) 
45 
 .addComponent(tf_address, 
javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE) 
 .addComponent(tf_username)) 
 .addGap(18, 18, 18) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING, false) 
 .addComponent(lb_password, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
 .addComponent(lb_port, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATE
D) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING, false) 
 .addComponent(tf_password) 
 .addComponent(tf_port, 
javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE)) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
 
46 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING) 
 .addGroup(layout.createSequentialGroup() 
 .addComponent(b_connect) 
 .addGap(2, 2, 2) 
 .addComponent(b_disconnect) 
 .addGap(0, 0, Short.MAX_VALUE)) 
 .addGroup(layout.createSequentialGroup() 
 .addComponent(b_anonymous, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
 .addComponent(jInternalFrame1, 
javax.swing.GroupLayout.PREFERRED_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE))))) 
 .addContainerGap()) 
 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, 
layout.createSequentialGroup() 
 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, 
Short.MAX_VALUE) 
47 
 .addComponent(lb_name) 
 .addGap(201, 201, 201)) 
 ); 
 layout.setVerticalGroup( 
 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
 .addGroup(layout.createSequentialGroup() 
 .addContainerGap() 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TR
AILING) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BA
SELINE) 
 .addComponent(lb_address) 
 .addComponent(tf_address, 
javax.swing.GroupLayout.PREFERRED_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE) 
 .addComponent(lb_port) 
 .addComponent(tf_port, 
javax.swing.GroupLayout.PREFERRED_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE) 
48 
 .addComponent(b_anonymous)) 
 .addComponent(jInternalFrame1, 
javax.swing.GroupLayout.PREFERRED_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.PREFERRED_SIZE)) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATE
D) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING, false) 
 .addComponent(tf_username) 
 .addComponent(tf_password) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BA
SELINE) 
 .addComponent(lb_username) 
 .addComponent(lb_password) 
 .addComponent(b_connect) 
 .addComponent(b_disconnect))) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATE
D) 
 
49 
 .addComponent(jScrollPane1, 
javax.swing.GroupLayout.PREFERRED_SIZE,310, 
javax.swing.GroupLayout.PREFERRED_SIZE) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATE
D) 
 
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING) 
 .addComponent(tf_chat) 
 .addComponent(b_send, 
javax.swing.GroupLayout.DEFAULT_SIZE, 
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
 
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
 .addComponent(lb_name)) 
 ); 
 
 pack(); 
 }// </editor-fold> 
 
 private void tf_addressActionPerformed(java.awt.event.ActionEvent 
evt) { 
 50 
 } 
 
 private void tf_portActionPerformed(java.awt.event.ActionEvent evt) { 
 
 } 
 
 private void tf_usernameActionPerformed(java.awt.event.ActionEvent 
evt) { 
 
 } 
 
 private void b_connectActionPerformed(java.awt.event.ActionEvent 
evt) { 
 if (isConnected == false) 
 { 
 username = tf_username.getText(); 
 tf_username.setEditable(false); 
 
 try 
 { 
51 
 sock = new Socket(address, port); 
 InputStreamReader streamreader = new 
InputStreamReader(sock.getInputStream()); 
 reader = new BufferedReader(streamreader); 
 writer = new PrintWriter(sock.getOutputStream()); 
 writer.println(username + ":has connected.:Connect"); 
 writer.flush(); 
 isConnected = true; 
 } 
 catch (Exception ex) 
 { 
 ta_chat.append("Cannot Connect! Try Again. \n"); 
 tf_username.setEditable(true); 
 } 
 
 ListenThread(); 
 
 } else if (isConnected == true) 
 { 
 ta_chat.append("You are already connected. \n"); 
52 
 } 
 } 
 
 private void b_disconnectActionPerformed(java.awt.event.ActionEvent 
evt) { 
 sendDisconnect(); 
 Disconnect(); 
 } 
 
 private void 
b_anonymousActionPerformed(java.awt.event.ActionEvent evt) { 
 tf_username.setText(""); 
 if (isConnected == false) 
 { 
 String anon="anon"; 
 Random generator = new Random(); 
 int i = generator.nextInt(999) + 1; 
 String is=String.valueOf(i); 
 anon=anon.concat(is); 
 username=anon; 
 53 
 tf_username.setText(anon); 
 tf_username.setEditable(false); 
 
 try 
 { 
 sock = new Socket(address, port); 
 InputStreamReader streamreader = new 
InputStreamReader(sock.getInputStream()); 
 reader = new BufferedReader(streamreader); 
 writer = new PrintWriter(sock.getOutputStream()); 
 writer.println(anon + ":has connected.:Connect"); 
 writer.flush(); 
 isConnected = true; 
 } 
 catch (Exception ex) 
 { 
 ta_chat.append("Cannot Connect! Try Again. \n"); 
 tf_username.setEditable(true); 
 } 
 
54 
 ListenThread(); 
 
 } else if (isConnected == true) 
 { 
 ta_chat.append("You are already connected. \n"); 
 } 
 } 
 
 private void b_sendActionPerformed(java.awt.event.ActionEvent evt) { 
 String nothing = ""; 
 if ((tf_chat.getText()).equals(nothing)) { 
 tf_chat.setText(""); 
 tf_chat.requestFocus(); 
 } else { 
 try { 
 writer.println(username + ":" + tf_chat.getText() + ":" + "Chat"); 
 writer.flush(); // flushes the buffer 
 } catch (Exception ex) { 
 ta_chat.append("Message was not sent. \n"); 
55 
 } 
 tf_chat.setText(""); 
 tf_chat.requestFocus(); 
 } 
 
 tf_chat.setText(""); 
 tf_chat.requestFocus(); 
 } 
 
 public static void main(String args[]) 
 { 
 java.awt.EventQueue.invokeLater(new Runnable() 
 { 
 @Override 
 public void run() 
 { 
 new client_frame().setVisible(true); 
 } 
 }); 
56 
 } 
 
 // Declaração de variáveis 
 private javax.swing.JButton b_anonymous; 
 private javax.swing.JButton b_connect; 
 private javax.swing.JButton b_disconnect; 
 private javax.swing.JButton b_send; 
 private javax.swing.JInternalFrame jInternalFrame1; 
 private javax.swing.JScrollPane jScrollPane1; 
 private javax.swing.JLabel lb_address; 
 private javax.swing.JLabel lb_name; 
 private javax.swing.JLabel lb_password; 
 private javax.swing.JLabel lb_port; 
 private javax.swing.JLabel lb_username; 
 private javax.swing.JTextArea ta_chat; 
 private javax.swing.JTextField tf_address; 
 private javax.swing.JTextField tf_chat; 
 private javax.swing.JTextField tf_password; 
 private javax.swing.JTextField tf_port; 
57 
 private javax.swing.JTextField tf_username; 
 // Fim da declaração variáveis 
} 
 
8 APRESENTAÇÃO DO PROGRAMA EM FUNCIONAMENTO EM UM 
COMPUTADOR 
 
58 
9 referencias 
Livros 
 COMER, Douglas E.. Internet Working with TCP/IP. 4a. Ed. 
Prentice Hall, 2000. 
 FOROUZAN, Behrouz A. Comunicação de dados e redes de 
computadores. 3a. ed. Porto Alegre: Bookman, 2006. 
 STALLINGS, William. Data and computer communications. 8a. ed. 
Upper Saddle River, NJ : Prentice Hall, 2006. 
 STALLINGS, William. Redes e sistemas de comunicação de 
dados. 5ª. ed. Rio de Janeiro: Elsevier, 2005. 
Internet 
 Brasil Escola 
 Schneider Electric 
 Universidade Federal do ABC 
 CCM-BR 
 
https://pt.wikipedia.org/wiki/Rede_de_computadores 
 
https://pt.wikipedia.org/wiki/Comunica%C3%A7%C3%A3o_de_dados#:~:
text=A%20comunica%C3%A7%C3%A3o%20dados%20%C3%A9%20a,um%2
0meio%20de%20transmiss%C3%A3o%20incomum. 
 
 
 
 
 
 
 
 
http://brasilescola.uol.com.br/informatica/comunicacao-dados.htm
http://www.schneiderelectric.pt/documents/product-services/training/transmissao_dados.pdf
http://posinfo.ufabc.edu.br/index_arquivos/RedesComunicacao.htm
http://br.ccm.net/contents/689-transmissao-de-dados-os-modos-de-transmissao
https://pt.wikipedia.org/wiki/Rede_de_computadores
https://pt.wikipedia.org/wiki/Comunica%C3%A7%C3%A3o_de_dados#:~:text=A%20comunica%C3%A7%C3%A3o%20dados%20%C3%A9%20a,um%20meio%20de%20transmiss%C3%A3o%20incomum
https://pt.wikipedia.org/wiki/Comunica%C3%A7%C3%A3o_de_dados#:~:text=A%20comunica%C3%A7%C3%A3o%20dados%20%C3%A9%20a,um%20meio%20de%20transmiss%C3%A3o%20incomum
https://pt.wikipedia.org/wiki/Comunica%C3%A7%C3%A3o_de_dados#:~:text=A%20comunica%C3%A7%C3%A3o%20dados%20%C3%A9%20a,um%20meio%20de%20transmiss%C3%A3o%20incomum
59

Outros materiais