problema con enchufes en java

Tengo el siguiente hilo que acepta las conexiones entrantes en un puerto específico:

public class ClientThread implements Runnable {
    ServerSocket serverSocket;
    Socket clientSocket;
    int serverPort = 6500;
    private String serverIpAddress = "127.0.0.1";
    DataInputStream is;
    ObjectOutputStream os=null;
    Coordinate coord;

    protected BlockingQueue queue = null;

    public ClientThread(BlockingQueue queue) {
        this.queue = queue;
    }

    public void run() {
        try {
            InetSocketAddress serverAddr = new InetSocketAddress(
                    serverIpAddress, serverPort);
            serverSocket = new ServerSocket();
            serverSocket.bind(serverAddr);
            System.out.println("s-a creat");
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to host");
        }

        try {
            clientSocket = serverSocket.accept();
            System.out.println("S-a conectat clientul de monitorizare!");

            os=new ObjectOutputStream(clientSocket.getOutputStream());
            try{
                while(true){
                    coord=(Coordinate)queue.take();
                    System.out.println(coord.getLat()+coord.getLon()+coord.getwId());
                    os.writeObject(coord);
                    os.flush();
                }
            } catch(Exception e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            System.out.println(e);

            try {
                clientSocket.close();
                os.close();
            }catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    }
}

El objeto que intento enviar es una instancia de la siguiente clase:

public class Coordinate implements Serializable{
    private final int lon;
    private final int lat;
    private final int workerId;

    public Coordinate(int lat, int lon, int workerId) {
        this.lat = lat;
        this.lon = lon;
        this.workerId=workerId;
    }

    public int getLon() {
        return lon;
    }

    public int getLat() {
        return lat;
    }

    public int getwId() {
        return workerId;
    }
}

Pero cuando inicio el hilo y acepto la conexión, aparece el siguiente error:

java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown 
    at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)
    at java.io.ObjectOutputStream.writeClassDesc(Unknown Source)
    at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at servers.ClientThread.run(ClientThread.java:55)
    at java.lang.Thread.run(Unknown Source)

Alguien más de lo que está mal?


Este error java.net.SocketException: el software provocó la cancelación de la conexión aparece cuando uno de los extremos del socket falla ... en mi caso fue el final que se conectó a ClientThread () y cuando intentaba escribir en el búfer apareció el error.

Respuesta 1

en Java, supongamos que tengo un archivo de texto con n filas, ¿es posible escribir y reemplazar solo la fila x? o reescribo todas las filas para editar alguna fila? Parece que he usado el archivo RandomAccess para ...

Estoy buscando crear una página web para grabar audio en streaming desde la fuente (como la radio en línea). Al principio pensé en hacer algo como grabar desde altavoces, pero soluciones como flash, java y ...

Estoy tratando de escribir un servidor en Java y comunicarme con él usando una aplicación para iPhone (Objetivo C). La conexión se realiza y puedo escribir datos en el servidor, pero no puedo leer los datos del ...

Soy nuevo en Java Web Start y estoy tratando de configurar una descarga jnlp en mi servidor. El inicio web parece iniciarse bien, pero da el siguiente error: ADVERTENCIA: la etiqueta <meta> no está cerrada correctamente ...