Baixe o app para aproveitar ainda mais
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
Compartilhar