Foros del Web » Programación para mayores de 30 ;) » Java »

bucle do-while en serverSocket

Estas en el tema de bucle do-while en serverSocket en el foro de Java en Foros del Web. Lo que intento es que el cliente pueda enviar mensajes al servidor y este los reciba hasta que el mensaje sea "close" y entonces cierre ...
  #1 (permalink)  
Antiguo 15/02/2014, 14:49
Avatar de dafnemartinezs  
Fecha de Ingreso: febrero-2013
Ubicación: Murcia
Mensajes: 23
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta bucle do-while en serverSocket

Lo que intento es que el cliente pueda enviar mensajes al servidor y este los reciba hasta que el mensaje sea "close" y entonces cierre la conexión.

El problema es que cuando recibe el "close" me da este error:


java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutp utStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStre am.java:141)
at clienteservidortcp.MonoServerTCPb.main(MonoServerT CPb.java:65)


Aquí dejo los codigos del servidor:
SERVIDOR:
Código:
package clienteservidortcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import javax.print.DocFlavor;

public class MonoServerTCPb {

    public String dirServidor = "localhost";
    public int puerto = 5555;

    public static void main(String[] args) {
        String dirServidor = "localhost";
        int puerto = 5555;

        try {
            //Crear socket servidor
            ServerSocket miServidor = new ServerSocket();
            System.out.println("Socket Servidor creado");

            //System.out.println("Haciendo binding");

            InetSocketAddress datosServidor = new InetSocketAddress(dirServidor, puerto);
            miServidor.bind(datosServidor);

            //Esperamos y aceptamos conexiones entrantes
            System.out.println("Esperando conexiones");
            Socket nuevoCliente = miServidor.accept();
            System.out.println("Cliente conectado");

            //Canal de entrada para recibir mensajes
            InputStream cEntrada = nuevoCliente.getInputStream();
            //Canal de salida para enviar mensajes
            OutputStream cSalida = nuevoCliente.getOutputStream();

            //Mensaje de confirmacion de conexion para el cliente
            String cliConectado = ("Te has conectado al servidor " + dirServidor + " en el puerto " + puerto);
            //Enviamos el mensaje
            cSalida.write(cliConectado.getBytes());

            //Crea un array de bytes para el mensaje que recibe del cliente
            byte[] mensaje = new byte[100];
                
            do{
                //Lee el mensaje 
                cEntrada.read(mensaje);
                //Muestra el mensaje recibido
                System.out.println("Mensaje recibido: " + new String(mensaje));

                //Confirma el mensaje y lo reenvia al cliente
                String mRecibido = "Mensaje recibido (servidor)";
                cSalida.write(mRecibido.getBytes());
            }while (new String(mensaje).compareToIgnoreCase("close") != 0) ;
            

            //Cierra el socket del cliente
            nuevoCliente.close();
            System.out.println("Socket del cliente cerrado");
            //Cierra el socket del servidor
            miServidor.close();
            System.out.println("Socket del servidor cerrado");

            System.out.println("Programa terminado");


        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
CLIENTE:
Código:
package clienteservidortcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

/**
 *
 * @author Dafne
 */
public class MonoClientTCPb {

    public static void main(String[] args) {
        BufferedReader leer = new BufferedReader(new InputStreamReader(System.in));

        try {

            String dirServidor = "localhost";
            int puerto = 5555;

            //Creamos el socket del cliente
            Socket miCliente = new Socket();
            System.out.println("Socket cliente creado");
            System.out.println("Estableciendo la conexión");

            // Obtenemos una dirección con los datos del servidor
            InetSocketAddress datosServer = new InetSocketAddress(dirServidor, puerto);

            //Conectamos con el servidor
            miCliente.connect(datosServer);
            //System.out.println("Cliente conectado a " + dirServidor + " en puerto " + puerto);

            //Canal de entrada para recibir mensajes
            InputStream cEntrada = miCliente.getInputStream();
            //Canal de salida para enviar mensajes
            OutputStream cSalida = miCliente.getOutputStream();

            byte[] cliConectado = new byte[150];
            cEntrada.read(cliConectado);
            System.out.println(new String(cliConectado));

            String mensaje = "";

            //Hace un bucle para que mientras el mensaje del cliente sea diferente a "close" siga enviando mensajes
            do {
                //Prepara el mensaje para enviarlo
                System.out.println("Mensaje cliente: ");
                mensaje = leer.readLine();
                System.out.println("Enviando mensaje al servidor");
                //Envia el mensaje
                cSalida.write(mensaje.getBytes());
                System.out.println("Mensaje enviado");
                
                byte[] confirmacion = new byte[100];
                
                //Lee el mensaje que entra desde el servidor
                cEntrada.read(confirmacion);
                //Muestra el mensaje recibido
                System.out.println(new String(confirmacion));
                System.out.println("");
            } while (mensaje.compareToIgnoreCase("close") != 0);


            //Cierra el socket del cliente
            miCliente.close();
            System.out.println("Socket del cliente cerrado");

            System.out.println("Programa terminado");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Etiquetas: bucle, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:24.