我在这里使用代码通过套接字发送单个文件.但是,我需要能够通过套接字发送多个文件(基本上是目录中的所有文件),并让客户端识别文件之间的分离方式.坦率地说,我完全不知所措.任何提示都会有所帮助.
注1:我需要一种方法来在一个连续的流中发送文件,客户端可以将这些文件分离成单个文件.它不能依赖客户的个别请求.
注2:要回答一个问题,我很确定我会在评论中写到,不,这不是作业.
编辑它有人建议我可以在文件本身之前发送文件的大小.我怎么能这样做,因为通过套接字发送文件总是以预定的字节数组或单独的单个字节完成,而不是由返回的long返回File.length()
Eng*_*uad 20
这是一个完整的实现:
发件人方:
String directory = ...;
String hostDomain = ...;
int port = ...;
File[] files = new File(directory).listFiles();
Socket socket = new Socket(InetAddress.getByName(hostDomain), port);
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
DataOutputStream dos = new DataOutputStream(bos);
dos.writeInt(files.length);
for(File file : files)
{
long length = file.length();
dos.writeLong(length);
String name = file.getName();
dos.writeUTF(name);
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
int theByte = 0;
while((theByte = bis.read()) != -1) bos.write(theByte);
bis.close();
}
dos.close();
Run Code Online (Sandbox Code Playgroud)
接收方:
String dirPath = ...;
ServerSocket serverSocket = ...;
Socket socket = serverSocket.accept();
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
DataInputStream dis = new DataInputStream(bis);
int filesCount = dis.readInt();
File[] files = new File[filesCount];
for(int i = 0; i < filesCount; i++)
{
long fileLength = dis.readLong();
String fileName = dis.readUTF();
files[i] = new File(dirPath + "/" + fileName);
FileOutputStream fos = new FileOutputStream(files[i]);
BufferedOutputStream bos = new BufferedOutputStream(fos);
for(int j = 0; j < fileLength; j++) bos.write(bis.read());
bos.close();
}
dis.close();
Run Code Online (Sandbox Code Playgroud)
我没有测试它,但我希望它能工作!