我正在编写一个程序,它能够使用以下方法通过套接字移动文件但是当我从套接字方法下载文件时,客户端程序中的下载不会结束操作并退出循环,尽管上传方法在服务器端已完成运行。 这是我在客户端的下载方法
public synchronized void downloadFile(String url) throws IOException{
try (FileOutputStream fileOutputStream = new FileOutputStream(url)) {
int countedBytes;
byte[] buffer = new byte[kbBlockSize];
while ((countedBytes = input.read(buffer)) > 0)
fileOutputStream.write(buffer, 0, countedBytes);//end while
fileOutputStream.flush();
}//end try with resources block
}//end method downloadFile
这是服务器端的上传方法
public synchronized void uploadFile(String url) throws IOException {
try (FileInputStream fileInputStream = new FileInputStream(url)) {
int countedBytes;
byte[] buffer = new byte[kbBlockSize];
while ((countedBytes = fileInputStream.read(buffer)) > 0)
output.write(buffer, 0, countedBytes);//end while
output.flush();
}//end try with resources block
}//end method uploadFile
但是由于上述方法已经完成,下载方法不会
如果有人能提供帮助,我会感激不尽。
答案 0 :(得分:0)
input.read(buffer)将始终大于0。 它将阻塞,直到它至少有一个字节或EOF。
因此服务器必须单独关闭流或单独发送下载大小,如某种标题。
例如在http中,可以设置内容长度或使用分块编码来表示数据大小。
为什么要创建新协议,而不是使用像http或ftp这样的东西?