Socket

Ola…
Estou com dificuldade de fazer com que este código Cliente Servidor se comuniquem até quando o cliente clicar em cancelar…
No momento o cliente só envia uma mensagem e o servidor tbm…
Ou seja, gostaria de fazer tipo um chat ( ficar conectado até o cliente clicar em Cancelar na vez de enviar sua mensagem )

import java.io.*;
import java.net.*;
import javax.swing.JOptionPane;

public class ServidorSimples{

	public static void main ( String[] args ){

		try{

			ServerSocket server = new ServerSocket (7000);
			System.out.println("Rodando...");
                        
                        while (true){
                        
			Socket connection = server.accept();
		
			DataInputStream entrada = new DataInputStream  (connection.getInputStream());

			DataOutputStream saida = new DataOutputStream (connection.getOutputStream());
                        
                        String s = entrada.readUTF();
                        
                        System.out.println("Recebi do Cliente a String: "+s);
                        
                        saida.writeUTF("RECEBI SUA MENSAGEM CLIENTE");
                        
                        saida.writeUTF(JOptionPane.showInputDialog("ENTRE COM A MENSAGEM PARA O CLIENTE"));
                        
                        String h = entrada.readUTF();
                        System.out.println(h);
                        
                        entrada.close();
                        saida.close();
                        
                        connection.close();
                        
                        server.close();}

		}catch ( Exception ex ){

			System.out.println("Algum problema ocorreu para criar ou receber o socket.");

		}

		
	}

}

import java.io.*;   
import java.net.*;   
import javax.swing.JOptionPane;
  
public class Cliente {   
  
    public static void main(String[] args) {
        
        Socket connection = null;
        
        
                                    
        try{   
            
            connection = new Socket ("localhost",7000);
            
            DataInputStream entrada = new DataInputStream (connection.getInputStream());
            
            DataOutputStream saida = new DataOutputStream (connection.getOutputStream());
                                    
            saida.writeUTF(JOptionPane.showInputDialog("ENTRE COM A MENSAGEM PARA O SERVIDOR"));
            
            String h = entrada.readUTF();
            
            System.out.println(h);//MENSAGEM RECEBIDA
            
            String s = entrada.readUTF();
            
            saida.writeUTF("RECEBI SUA MENSAGEM SERVIDOR");
            //String h = entrada.readUTF();
            
            System.out.println("Recebi do Servidor a String: "+s);
            //System.out.println(h);
            
            entrada.close();
            saida.close();
            
            connection.close();
            
        }catch(IOException e){   
               
            System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");   
           
        }
           
        }   
  
    }   

aqui está um exemplo:
http://www.guj.com.br/posts/list/100549.java

Você tem que colocar o read do stream dentro de um loop, assim ele vai ficar lendo o tempo todo até parar na condição que você determinar.

Aqui também tem 2 exemplos:

Um em TCP, bastante minimalista (roda em console e tem só o mínimo necessário para um CHAT) e uma versão em UDP, bastante completa.

Então pessoal gostaria mesmo se alguém pudesse ajudar a corrigir esse mesmo código que enviei… O cliente e o servidor já estão conversando… Mas gostaria de colocar no cliente um WHILE pra ficarem trocando msgs até o cliente clicar em cancelar ( nao sei se estou sendo claro )… Só que nao tenho idéia de como colocar esse WHILE no cliente ( comparando o WHILE com o que nesse código ) que se fosse no caso de uma string ficaria assim né… while ( string tal != null ) como faça isso… Que nesse exemplo meu teria que comparar com essa parte ai… mas nao sei como faço…

saida.writeUTF(JOptionPane.showInputDialog("ENTRE COM A MENSAGEM PARA O SERVIDOR"));