java - 如何保持套接字输出流打开并多次写入

标签 java sockets

我正在制作一个接受 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)

最佳答案

不要在sendData中关闭套接字。您将需要在 sendData 外部的代码中处理关闭。

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

关于java - 如何保持套接字输出流打开并多次写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876466/

相关文章:

java - 如何在 SpringMVC Controller 方法中提交或回滚事务

java - 无法在套接字列表循环中获取套接字的 DataOutputStream

java - Android:连续套接字写入

java - 处理 Java Socket 中的一个或多个单词 .readLine()

Java OutOfMemory 异常 : mmap error on loading zip file

java - log4j 没有记录到文件

java - 如何在关机时等待 RestTemplate 响应?

java - 在 gradle 构建中自定义启动脚本的位置

c++ - 如何在收到的包中获取有关 ICMP 的信息?

javascript - 重新连接后未触发 socket.io 'connect' 或 'reconnect' 事件