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.