我正在尝试向服务器发送类似HTTP请求的内容,然后从服务器获取响应。在这个时间服务器读取我的请求,而客户端将不会关闭outputStream。这就是服务器无法将响应发送回客户端的原因。它就像“deadLock”。当我尝试在客户端关闭()outputStream时,我在读取响应的行中出现异常,因为Socket连接已关闭。我该如何解决这个问题?谢谢。
客户端:
File file = new File("C:\\Programing\\WebServer\\src\\main\\java\\Client\\testimg.bmp");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out);
long length = file.length();
Files.copy(file.toPath(), out);
out.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder stringBuilder = new StringBuilder();
String s;
while ((s = reader.readLine())!=null)
stringBuilder.append(s);
System.out.println(stringBuilder.toString());
服务器端:
System.out.println("Handle started");
try {
DownloadingFile downloadingFile = new DownloadingFile();
downloadingFile.downloadFile(in);
writingResponse(out, "OK");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
在服务器端附加类:
public class DownloadingFile {
public void downloadFile(InputStream in) throws IOException {
FileOutputStream outputStream = new FileOutputStream("C:\\Programing\\WebServer\\src\\main\\java\\Server\\Messages\\testingimg.bmp");
int c;
while ((c = in.read()) != -1) {
outputStream.write(c);
}
outputStream.flush();
System.out.println("Downloaded");
}
}
答案 0 :(得分:0)
我找到了答案! 输出请求后,我必须调用
socket.shutdownOutput();