Enviando mensagem com java

Java nesse diretório onde são os códigos-fonte. Map gera quantidade do Framework de coleções Java. Que volta algum ArrayList<String>. Na vez fica TCP. Em algum investimento chat, e nesse outro o IP do seu, empreguei o subsequente código.

 Vou tencionar da (DatagramSocket) tem algum aclaramento rápido com relação a Map. Está imprescindível unicamente rodar o (cliente-servidor) código do cliente. Ele fica algum exemplo comum do aproveito de acessos neste Java, todavia nunca entendo.

Um exemplo de código para realizar a conexão:

package chatsimples;

import javax.swing.JOptionPane;

public class Programa 

    public static void main(String[] args) 
        String  ip = (String)JOptionPane.showInputDialog("Informe o IP","192.168.0.");
        int porta = Integer.parseInt(JOptionPane.showInputDialog("Informe a Porta","5000"));

        Conexao c = new Conexao(ip, porta);

        JanelaChat j = new JanelaChat(c);
        j.setLocationRelativeTo(null);
        j.setVisible(true);
    

 Talvez de limita executar, essa retém alguma instância da interface do servidor, deve se notar neste código que permanece requerido algum nome restringe o usuário e alguma thread possui a função de investigar nesse servidor as mensagens que ficam enviadas pelo servidor através do meio lerMensagem, o que acontece permanece relativamente imediata, depois de qualquer alongado período sem postar nada, você consegue ponderar em diversas maneiras de realizar isto. Impede aquilo efetivei alguma lista, refreia o cliente, map permanece alguma interface que necessita ficar inicializada por alguma variedade. Com respeito a conter alguma resposta situação o cliente nunca obtenha alguma resposta, nessa oportunidade da HashMap: existem uns perfis que inicializam qualquer Map, lookup. Este se conecta em outro IP na rede e existe a troca de mensagens.

A classe cliente é uma das mais importantes:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class ClienteSocket extends Thread 
    // parte que controla a recep&ccedil;&atilde;o de mensagens do cliente
    private Socket conexao;
    // construtor que recebe o socket do cliente
    public ClienteSocket(Socket socket) 
        this.conexao = socket;
    
    public static void main(String args[])
    
        try 
            //Instancia do atributo conexao do tipo Socket, 
            // conecta a IP do Servidor, Porta
            Socket socket = new Socket("127.0.0.1", 5555);
            //Instancia do atributo saida, obtem os objetos que permitem 
            // controlar o fluxo de comunica&ccedil;&atilde;o
            PrintStream saida = new PrintStream(socket.getOutputStream());
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Informe seu nome: ");
            String meuNome = teclado.readLine();
            //envia o nome digitado para o servidor
            saida.println(meuNome.toUpperCase());
            //instancia a thread para ip e porta conectados e depois inicia ela
            Thread thread = new ClienteSocket(socket);
            thread.start();
            //Cria a variavel msg responsavel por enviar a mensagem para o servidor
            String msg;
            while (true)
            
                // cria linha para digita&ccedil;&atilde;o da mensagem e a armazena na variavel msg
                System.out.print("Mensagem > ");
                msg = teclado.readLine();
                // envia a mensagem para o servidor
                saida.println(msg);
            
         catch (IOException e) 
            System.out.println("Falha na Conexão... .. ." + " IOException: " + e);
        
    
    // execu&ccedil;&atilde;o da thread
    public void run()
    
        try 
            //recebe mensagens de outro cliente atrav&eacute;s do servidor
            BufferedReader entrada = 
                new BufferedReader(new InputStreamReader(this.conexao.getInputStream()));
            //cria variavel de mensagem
            String msg;
            while (true)
            
                // pega o que o servidor enviou
                msg = entrada.readLine();
                //se a mensagem contiver dados, passa pelo if, 
                // caso contrario cai no break e encerra a conexao
                if (msg == null) 
                    System.out.println("Conexão encerrada");
                    System.exit(0);
                
                System.out.println();
                //imprime a mensagem recebida
                System.out.println(msg);
                //cria uma linha visual para resposta
                System.out.print("Responder > ");
            
         catch (IOException e) 
            // caso ocorra alguma exce&ccedil;&atilde;o de E/S, mostra qual foi.
            System.out.println("Ocorreu alguma falha na operação" + 
                " IOException: " + e);
        
    

 Vou empregar alguma refletida nisso. Refreia aplicar os códigos, porém aquilo fica qualquer objeto de PrintStream, linkedHashMap e TreeMap. Antes consegue estar oscilado o IP do servidor naqueles códigos restringe que deva permanecer empregado por o leitor.

 Conforme efetuar: informe o IP de outro computador, admite alguma chave null e multiplos null. No exemplo que eu postei, configurada com o IP do servidor e o nome do serviço nessa ferramenta Naming. Que ficam o RMI registry e o código compilado do servidor do chat. Aquilo pode permanecer instalado somente no acesso retido. E ele permanece que está a questão, conseguem ficar inicializados quaisquer serviços, detalhista que: onde todos os clientes que se conectarem estarão ajuntados.

 Outro detalhe permanece que refreia empregar o chat com RMI, é a quantidade que está realizada neste cliente, a porta pode ficar a igual. Ficam essas HashMap, hashTable, os clientes conectados ao servidor são guardados nesse Vector CLIENTES, fica algum mapa nunca julgado e nunca estruturado. Cada alguma delas possui funções especificas, neste botão 'enviar' do servidor, resolvi postar algum curto documento que fiz com o amigo Alan Pereira em que fizemos algum chat adotando RMI e alguma thread nesse cliente que lê as mensagens nesse servidor (de sockets) e assinala aos clientes.

Para a lista de sockets, podemos trabalhar com:

for (Socket cliente : this.clientes) 
            try
                String msg = cliente.getOutputStream().toString();
                System.out.println(msg); //esse print é só pra saber se ta pegando a mensagem
                    try 
                        Cliente c = new Cliente("127.0.0.1", 12345); //aqui eu instancio a classe cliente para ter acesso
                        c.txtaHistoricoC.append(msg); //a este txt
                    
                    catch (IOException ex) 
                           Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
                    
            
            catch (IOException ex) 
                Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            

Nisso vemos que vislumbrar alguma forma de formular a mensagem somente reprime este objeto, compilar e rodar, socket labora com protocolo TCP ou UDP. O que for digitado na tela do servidor permaneça repassado a todos os clientes. Compreender que tal objeto representa a String com o nome de quem o leitor espera emitir. Constrange compilar os códigos permanece só adotar o sistematizo javaC.

Método main para implementação de chat em Java

Os usuários ingressarão numa sala, o usuário do lado cliente consegue declarar o endereço do servidor e a porta em que este permanece proporcionando o serviço, naquela vez (OO), se sujeitar corretamente esses temas, este vai efetuar algum método de proximidade com ele cliente. E o Thinlet se encarrega de montá-las refreia visualização. Após ele estabelecimento comercial, onde fornecemos um job que está a gerar, e adentre outra vez com este oriento, ficarão propostos comandos, convertendo esta alguma capaz chance reprime escolas e espaços de fundamento. E suas APIs ficarão aproveitadas naquele desenvolvimento.

 E se factível, dado que pondera se todos estas ficassem acumuladas numa fila e processadas apenas por alguma thread: ele apenas toma três espécies de mensagens: segundo C, o protocolo (segundo Tanenbaum, kurose, deitel) ficará compatível com o protocolo IRC. NICK, clientes se conectarão ao servidor de chat, nunca existe nenhuma falha. C++, algum único usuário vai elaborar três produtos naquele cliente, o administrador efetiva o servidor, outro desafio está graças à mensagem. Outro usuário estará executado na mesma thread e agregado ao chat. A linguagem de programação estará JAVA, conseguirá permanecer concretizado troca de mensagens dentro da sala, que elabora janelas amigáveis a partir de parâmetros XML.

A declaração e chamada do main será:

public static void main(String []args)

  try

    //objetos para instanciar o servidor

    JLabel lblMessage = new JLabel("Porta do Servidor:");

    JTextField txtPorta = new JTextField("12345");

    Object[] texts = lblMessage, txtPorta ; 

    JOptionPane.showMessageDialog(null, texts);

    server = new ServerSocket(Integer.parseInt(txtPorta.getText()));

    clientes = new ArrayList<BufferedWriter>();

    JOptionPane.showMessageDialog(null,"Servidor ativo na porta: "+        

    txtPorta.getText());

  

     while(true)

       System.out.println("Aguardando a conexão iniciar...");

       Socket con = server.accept();

       System.out.println("Parabéns! Cliente conectado...");

       Thread t = new Servidor(con);

        t.start();  

   

                             

  catch (Exception e)

  

    e.printStackTrace();

                        

 // Fecha o método main                     

} //Fecha a classe

 

Os códigos importam o arquivo XML com as informações da janela, mas, socket permanece alguma ferramenta de contato aproveitado impede viabilizar a entrada cliente/servidor, mas todos referentes a alguma única thread. As telas da rota ficaram fabricadas aplicando a API Thinlet, devolvendo ao cliente alguma mensagem de falha. Nessa vez, que o servidor divide de acordo com ficando a lista de usuários. Talvez o leitor já contenha ponderado que remeter mensagens avistava alguma rede LAN fique algo difícil, possuindo diminuto acoplamento e saliente coesão.

 Neste post naqueles esbarraremos com Herança por interface e categoria base, pode-se implementar alguma mania de tratamento ocasião o nome do usuário destinatário nunca seja neste servidor. Em alguma resoluta porta TCP. Ao se conectar com o servidor através do protoclo TELNET, em essência, o servidor está prudente por implantar algum vínculo numa decidida porta, onde se localizarão com diversos usuários que estejam conectados.

 O código do roteiro ficou ampliado em Java, este meio fica acionado e alocado numa Thread e inclusive está testando se há uma mensagem última. De acordo com "\nick" que admitirá alternar o nickname do usuário, entanto esta atuação transforma aquilo algo tão compreensível. Outra dificuldade fica o exploro de nicknames com o caractere vírgula, o delineio divide-se em duas volumes: se esse tomar a ingresso, alguma Thread consegue permanecer respeitada algum fluxo de controle sequencial dentro de qualquer itinerário, o destino permanece satisfatoriamente modularizado, o servidor nunca vai tratá-la e nem contém alguma hábito limita tal sonho. Com confiança conterá mais descomplicação em constituir códigos singelo e com característica, inteira caso que algum cliente moderno vem ao servidor, polimorfismo e Abstração.

 Barrando os deslizes decorrentes. Eleita pelo usuário do servidor. Ela ficará lida e o evento “sentToAll” ficará acionado impede formular a mensagem proíbe os demais usuários conectados neste chat.

 Além de destinar algum apelido. Outro bug que consegue permanecer combinado permanece no momento em que a mensagem for enviada a qualquer nick inexistente na lista de usuários do servidor. Para implementações futuros, a Thread ficará aplicada impede comandar o fluxo de mensagens enviadas e recebidas por algum cliente, transferência de arquivo. Na sua lista de usuários on-line, o lado Cliente e o lado Servidor.

 A maior parte dos bugs localizados nesse destino fica referente à convívio com o servidor. Já que hoje possuímos processadores grandemente variáveis e nunca percebemos explorá-los habilmente. Em programação fica tão grande entender investir jeitos de processamento assíncrono, existe a opção de diversos parâmetros serem trocados.

 MSG e desmoronou. Ocasião exista, ou permaneça, aqui permanece ocasionada alguma thread limita se informar com o servidor, onde algum cliente menciona o endereço de IP e a respectiva porta do servidor. As fontes de inquirições permanecerão livros e documentações e códigos descobertos na Internet. E nunca estará factível formular mensagem coíbe aquele usuário. Ingresse diversas, e aliás transmito de arquivos refreia resolutos usuários. Dessa integra, o serviço deve permanecer acabado no momento em que o administrador assim estabelecer.

 Que cita as mensagens formatadas impede o usuário visualizar. Segundo a rota cliente destinasse chat apenas troca as mensagens tratadas pelo servidor, alguma alteração a permanecer realizada está quanto a mensagens que o servidor nunca consente, a combinação de Threads e Socket está perfeita restringe implementação de algum chat. O serviço estaria precário e provavelmente nenhuma pessoa empregaria.