【问题标题】:problem with sockets in javajava中的socket问题
【发布时间】:2011-09-04 07:28:50
【问题描述】:

我有以下线程接受特定端口的传入连接:

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

我要发送的对象是以下类的一个实例:

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;
    }
}

但是当我启动线程并接受连接时,我收到以下错误:

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)

有人知道什么是错的吗?


这个错误java.net.SocketException:软件导致连接中止出现在一个套接字端崩溃时......在我的例子中是连接到ClientThread()的端,当我试图在缓冲区中写入时出现错误。

【问题讨论】:

  • ClientThread.java的第55行是哪一行?
  • os.writeObject(coord);这个,但不要打扰它,因为我的问题是另一个问题...我在套接字的另一侧有一个地理编码器,这使我的连接崩溃...我会尝试修复它,如果它没有'不工作我会发布另一个问题。Thx

标签: java multithreading sockets object serializable


【解决方案1】:

您没有放置客户端代码,很难理解客户端可以做什么,但我看到代码的一部分可能有问题。这是

 while(true){
                    coord=(Coordinate)queue.take();
                    System.out.println(coord.getLat()+coord.getLon()+coord.getwId());
                    os.writeObject(coord);
                    os.flush();
                }

java.net.SocketException: Software caused connection abort: socket write error 是什么意思?这意味着连接已关闭但您尝试将一些数据写入套接字。但我可能是错的。

【讨论】:

  • 不,你没有错……连接是从另一边关闭的;).....你擅长这个;)
  • 分析所有代码会更好,而不仅仅是一个方面,请在以后发布所有代码范围:)干杯:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2020-11-03
  • 2012-01-26
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2011-07-19
相关资源
最近更新 更多