gpt4 book ai didi

java - 使用 IOUtils.copy() 时套接字流挂起

转载 作者:行者123 更新时间:2023-12-03 21:27:25 25 4
gpt4 key购买 nike

我想将包含 XML 的 InputStream 从客户端发送到服务器。所述服务器使用 Streaming API for XML (StAX) 操作 XML 流并将其发送回客户端。

我设法将 XML 发送到服务器,客户端收到答案,但没有退出,因为服务器从未完成从客户端读取 InputStream。但是当服务器只是将输入转储到 System.out 而不是发送某些内容时,读取完成...

edit我忘了说 IOUtils.copy() 在客户端的两个单独线程中运行。

这里有一些代码可以重现这一点,我在服务器上用 IOUtils.copy() 替换了 StAX 部分。

服务器

ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();

InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();
IOUtils.copy(in, out);

客户

Socket socket = new Socket(host, port);
FileInputStream fin = new FileInputStream(file);
OutputStream out = socket.getOutputStream();
IOUtils.copy(fin, out)

InputStream in = socket.getInputStream();
IOUtils.copy(in, System.out)

最佳答案

您必须刷新并关闭 InputStream 和 OutputStream。像这样:

ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();

InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();
IOUtils.copy(in, out);

//add
out.flush();
in.close();
out.close;

关于java - 使用 IOUtils.copy() 时套接字流挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com