java - BufferedReader、StreamWriter 崩溃

标签 java sockets

错误说套接字已关闭...我可以很好地发送到服务器,我可以很好地从服务器接收,但是一旦我尝试发送和接收,我总是会收到“套接字已关闭”错误。

服务器:

        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String decodedString;
        while ((decodedString = in.readLine()) != null) {
            System.out.println(decodedString);
        }
        in.close();

        OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream());           
        osw.write("return: "+decodedString);
        osw.flush();         
        osw.close();

客户:

    Socket c = new Socket("localhost",4040);    
    OutputStreamWriter osw = new OutputStreamWriter(c.getOutputStream());
    osw.write("Test");
    osw.flush();
    osw.close();

    BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
    String decodedString;
    while ((decodedString = in.readLine()) != null) {
        System.out.println(decodedString);
    } 
    in.close();
    c.close();

最佳答案

这是因为当您关闭其中一个流 (osw.close();) 时 - socked 也会关闭。 来自 Socket.getOutputStream 的 javadoc:

Closing the returned {@link java.io.OutputStream OutputStream} will close the associated socket.

尝试刷新流,但仅在完成后才关闭它们。

关于java - BufferedReader、StreamWriter 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163040/

相关文章:

java - 在字符串中查找子字符串的位置(不是 indexOf)

java - 在 Java 中加载 OpenGL 和 LWJGL3 中的纹理

java - Joda DateTime 无法通过毫秒正确设置日期

java - Akka 是如何实现类似 JMM 的 happens-before 关系的?

python - 用于通讯python的UNIX套接字-C++

java - 设置默认的 SocketFactory

java - 尝试使用 FileDialog 捕获异常

java - 如何将 tcp 套接字上的 java byte[] 发送到服务器上的 c++ char[]?

android - 如果我想在 pc 和 Android 模拟器之间建立套接字连接,正确的 IP 地址是多少?

c# - 如何解析内存流中接收到的数据?