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:
CLIENTE: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(); } } }
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(); } } }