style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

programa con sockets

que tal amigos acudiendo a ustedes para resolver mi duda, la idea es que al presionar el boton enviar del lado del cliente lo haga n veces, al momento solo he logrado que lo haga una vez, creo el error esta que después de hacerlo una vez cierra la conexion con el servidor.
He leeido que debe ser con un while (true) pero no se bien como aplicarlo , alguna idea ?

import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Cliente implements ActionListener
{
    private static JTextField introduceNombre;
    private static JTextArea mensaje;
    private static JButton salir,enviar,limpiar;
    VistaCliente gui;
    static final String HOST = "localhost";
    static final int PUERTO=5000;
    private static Socket skCliente;
    private static OutputStream aux;
    private static DataOutputStream flujo;
    /**
     *
     * Constructor for objects of class MensajeSockets
     */

    public Cliente(VistaCliente gui,JTextField introduceNombre,JTextArea mensaje,JButton salir,JButton enviar,JButton limpiar)
    {
         try
         {
           this.introduceNombre=introduceNombre;    
           this.mensaje=mensaje;
           skCliente = new Socket( HOST , PUERTO );
         }
         catch( Exception e )
         {
           System.out.println( e.getMessage() );
         }
      }
    /* Maneja los eventos
       * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */

    public void actionPerformed(ActionEvent ae)
    {
        String accion = ae.getActionCommand();
        if (accion.equals("Salir"))
        {
            System.exit(0);
        }
        else
        {
          if(accion.equals("Enviar"))
           {
             enviaDatos();
            }
            else
            {
              limpiar();
            }
         }
    }//termina actionPerformed
    public void enviaDatos()
    {
     try
     {
       aux = skCliente.getOutputStream();
       flujo = new DataOutputStream( aux );
       flujo.writeUTF( introduceNombre.getText()+","+mensaje.getText());
       flujo.close();
      }
     
      catch(IOException e)
      {
        System.out.println("El cliente no puede escribir");
      }

       }
public void limpiar()
{
  introduceNombre.setText("");
mensaje.setText("");
}
}

///// Servidor

import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Servidor implements ActionListener
{
    private static JButton salir;
    private static JTextField areaEmisor,areaNombre;
    private static JTextArea observaciones;
    static final int PUERTO=5000;
    private static ServerSocket skServidor;
    private static Socket skCliente,conexion;
    private static InputStream aux;
    private static DataInputStream flujo;
    VistaServidor gui;
    private static String s,sr1;
    private static String[] datos;
      /**
     * Constructor for objects of class MensajeSockets
     */

    public Servidor(VistaServidor gui,JButton salir,JTextField areaEmisor,JTextField areaNombre,JTextArea observaciones)
    {
        this.observaciones=observaciones;
        this. areaEmisor= areaEmisor;
        datos = new String[2];  
        this.areaNombre=areaNombre;
        try
        {
              skServidor = new ServerSocket( PUERTO );
              try
              {
              skCliente = skServidor.accept();
              aux = skCliente.getInputStream();
              flujo = new DataInputStream( aux );
              separaDatos ( );
              estableceDatos ( );
              flujo.close();
              }
                catch( Exception e )
        {
            System.out.println( "conexion cerrada por el server "+e.getMessage() );
        }
        }
        catch( Exception e )
        {
            System.out.println( "conexion cerrada por el server "+e.getMessage() );
        }
     }
    /* Maneja los eventos
       * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */

    public void actionPerformed(ActionEvent ae)
    {
        String accion = ae.getActionCommand();
        if (accion.equals("Salir"))
        {
            System.exit(0);
        }
    }//termina actionPerformed
    public void estableceDatos ( )
    {
        observaciones.setText(datos[1]);
        areaNombre.setText(datos[0]);
    }
    public void separaDatos ( )
    {
      try
      {
         s=flujo.readUTF();
         datos = new String[2];      
         datos = s.split(",");  
         sr1   = datos[0].trim() + "," + datos[1].trim();
      }
      catch(IOException e)
      {
         System.out.println("No se peude leer");
      }
    }
}
AdjuntoTamaño
cliente.rar2.28 KB

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

dos cosas

Del lado del servidor, parece que solamente aceptas una conexión, no hay un ciclo donde aceptes conexiones y despaches cada una en un hilo.

Del lado del cliente, parece que solamente abres un socket y para enviar datos creas un OutputStream nuevo pero sobre el stream del socket, la bronca es que luego lo cierras y eso causa que se cierre el stream del socket. Si vas a hacerlo así, necesitas cerrar completamente el socket y crear uno nuevo (pero para eso, el servidor debe aceptar más conexiones).

Revisa en mi blog un post muy viejo de java.io y java.nio, trae ejemplos de sockets simples cliente/servidor.

Imagen de puzzlemaniaco

ok gracias lo checare

ok gracias lo checare

Imagen de puzzlemaniaco

Si coloco un cilo while el

Si coloco un cilo while el servidor escucha varias veces pero no pinta en la interfaz lo que le envia el cliente , es asi el proceso?

try
        {
          skServidor = new ServerSocket( PUERTO );
         while(true)
          {
            try
            {
                skCliente = skServidor.accept();
                aux = skCliente.getInputStream();
                flujo = new DataInputStream( aux );
                s=flujo.readUTF();
                separaDatos ( );
                estableceDatos ( );
                aux.close();
                flujo.close();
                skCliente.close();
            }
            catch ( EOFException excepcionEOF ) {
               System.err.println( "El servidor terminó la conexión" );
            }
          }
        }
        catch ( IOException excepcionES )
        {
         excepcionES.printStackTrace();
     
        }

Del lado del cliente coloco lo siguiente a eso te referías con cerrar el socket completamente?, leei tu post pero no me quedo claro, sigo cometiendo el mismo error? ,

 try
                 {
                      skCliente = new Socket( HOST , PUERTO );
                       aux = skCliente.getOutputStream();
                       flujo = new DataOutputStream( aux );
                      enviaDatos();
                        flujo.close();
                        skCliente.close();
                 }
Imagen de beto.bateria

Los metodos: separaDatos (

Los metodos:
separaDatos ( );
estableceDatos ( );
enviaDatos();
¿Como obtienen el stream para leer la informacion o mandarla?

Imagen de puzzlemaniaco

Del constructor imagino que

Del constructor imagino que ahí ha de estar el problema

  public void enviaDatos()
    {
     try
     {
     
       flujo.writeUTF( introduceNombre.getText()+","+mensaje.getText());
     
      }
     
      catch(IOException e)
      {
        System.out.println("El cliente no puede escribir");
      }

       }

y los otros dos

 public void estableceDatos ( )
    {
        observaciones.setText(datos[1]);
        areaNombre.setText(datos[0]);
    }
    public void separaDatos ( )
    {
     
         
         datos = new String[2];      
         datos = s.split(",");  
         sr1   = datos[0].trim() + "," + datos[1].trim();
   
    }
Imagen de beto.bateria

¿Podrias mandar a imprimir en

¿Podrias mandar a imprimir en pantalla la variable sr1? para asegurar de que llega la informacion.

Imagen de puzzlemaniaco

gracias ya lo solucione

gracias ya lo solucione

Imagen de beto.bateria

¿podrias ayudar a la

¿podrias ayudar a la comunidad poniendo tu solucion?

Imagen de puzzlemaniaco

de esta forma

public void conectaSocket()
{
try
{
skServidor = new ServerSocket( PUERTO );
try
{
skCliente = skServidor.accept();
aux = skCliente.getInputStream();
flujo = new DataInputStream( aux );
while(true)
{
try
{
s=flujo.readUTF();
System.out.println(s);
separaDatos ( );
estableceDatos ( );
}
catch(IOException e)
{
try
{
skCliente.close();
flujo.close();
}
catch(IOException es)
{
}
}
}
}
catch( Exception e )
{
System.out.println( "conexion cerrada por el server "+e.getMessage() );
}
}
catch( Exception e )
{
System.out.println( "conexion cerrada por el server "+e.getMessage() );
}
}
Por cierto ahora tengo una duda con pasar estos datos a un JTable en otro post tengo el problema haber si pueden hehcarme una mano con eso.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">