0

我正在制作一个接受 TCP 套接字连接并显示它发送的信息的应用程序。这行得通。我已经决定我希望能够多次从客户端向服务器发送信息。现在这就是它的发送方式。

socketStream = socket.getOutputStream();
to_send.add(new String[][] {{
ips + ":" + socket.getPort(),
System.getProperty("user.name"),
System.getProperty("os.name")
}});

sendData(to_send);

while(!finished) {
 socketStream = socket.getOutputStream();
 oos = new ObjectOutputStream(socketStream);
 oos.writeObject(new String[][] {{"Open","LOL"}});
 oos.flush();
}

-

public void sendData(ArrayList<String[][]> d) {
    try {

        oos = new ObjectOutputStream(socketStream);
        oos.writeObject(d);
        oos.flush();


        System.out.println("Sent: " + to_send.get(0));


    } catch (Exception e) {

        System.out.println(e.toString());
    }
}

我收到此错误:

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 Source)
    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 Server.<init>(Server.java:57)
    at Server.main(Server.java:26)
4

2 回答 2

1

不要关闭sendData. 您将需要在外部处理关闭代码sendData

编辑:当远程端终止连接时,可能会导致此异常。可能发生的情况是您使用两个ObjectOutputStreams 导致服务器出现异常,这会强制终止连接。

于 2012-06-04T04:59:19.057 回答
0

在完成 Socket 之前不要关闭输出流。关闭输出流或输入流会关闭套接字。

并且不要使用多个ObjectOutputStreamsand ObjectInputStreams。在插座的使用寿命期间,在两端各使用一个。否则你会遇到StreamCorruptedExceptions. 这些东西在构造时会写入并期望标头,如果您在流中间打开一个新标头,另一端会出错。

于 2012-06-04T05:02:28.100 回答