Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将流更改为java套接字_Java_Sockets_Stream - Fatal编程技术网

将流更改为java套接字

将流更改为java套接字,java,sockets,stream,Java,Sockets,Stream,我需要在运行时更改套接字流。 首先,我需要使用ObjectStreams: Socket socket = ... InputStream networkInput = socket.getInputStream(); OutputStream networkOutput = socket.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(networkOutput); oos.flush(); ObjectIn

我需要在运行时更改套接字流。 首先,我需要使用ObjectStreams:

Socket socket = ...
InputStream networkInput = socket.getInputStream();
OutputStream networkOutput = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(networkOutput);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(networkInput);
//use the object-streams
然后我需要换到另一条流

oos.close();
ois.close();
XYOutputStream xyos = new XYOutputStream(networkOutput);
xyos.flush();
XYInputStream xyis = new XYInputStream(networkInput);
但是如果我使用上面的代码,套接字就关闭了,我会得到一个

java.net.SocketException: Socket closed
如果我使用

socket.shutdownInput();
socket.shutdownOutput();
而不是关闭旧的溪流,我得到了一个

java.net.SocketException: interrupted data transfer (broken pipe)

当我尝试初始化XYStreams时。

我认为您不需要关闭该流。 我已经编写了一个使用文件系统和打印流的示例,但是套接字和输出流应该是相同的

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class TestStream {
    public static void main (String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("test.txt");
        PrintStream p1 = new PrintStream(fos, false);
        PrintStream p2 = new PrintStream(fos, false);
        p1.print("Test");
        p1.flush();
        p2.print(100);
        p2.flush();
        fos.close();
    }
}

完成所有操作后关闭流。是的,我尝试过这个。它适用于ObjectOutputStream,但如果我尝试初始化第二个ObjectInputStream,程序将冻结。在new ObjectInputStream(networkInput)行,程序正在阻塞。