Java 某些文件格式在FTP上损坏
我已经编写了一个服务器和一个客户端来实现FTP,如果我创建文本文件并发送它们,它们就可以正常工作。但一旦我发送其他格式的文件,客户端接收到的文件就已经损坏。这是我发送文件的代码Java 某些文件格式在FTP上损坏,java,sockets,file-handling,Java,Sockets,File Handling,我已经编写了一个服务器和一个客户端来实现FTP,如果我创建文本文件并发送它们,它们就可以正常工作。但一旦我发送其他格式的文件,客户端接收到的文件就已经损坏。这是我发送文件的代码 try { fis=new FileInputStream(filenm); } catch(FileNotFoundException exc) { f
try
{
fis=new FileInputStream(filenm);
}
catch(FileNotFoundException exc)
{
filexists=false;
System.out.println("FileNotFoundException:"+exc.getMessage());
}
if(filexists)
{
System.out.println("sent");
sendBytes(fis, output);
fis.close();
}
private static void sendBytes(FileInputStream f,OutputStream op)throws Exception
{
byte[] buffer=new byte[1024];
int bytes=0;
while((bytes=f.read(buffer))!=-1)
{
op.write(buffer,0,bytes);
}
}
fis-FileInputStream对象
output-OutputStream对象(Socket.getOutputStream())
客户端代码为:
File f=new File(dir,"file2");
FileOutputStream fos=new FileOutputStream(f);
DataOutputStream dops=new DataOutputStream(fos);
System.out.println("2nd Stage");
while(done)
{
fc2=br.read();
if(fc2==-1)
{
done=false;
}
else
{
dops.write(fc2);
}
}
fos.close();
System.out.println("File Recieved");
我使用的是正确的流吗?听起来你在以ASCII模式发送二进制文件
在通过发送端口或PASV命令设置数据通道之前,先在控制通道上发送类型I而不是类型A。您是否记得将传输模式设置为图像?为什么在服务器和客户端中使用不同的读取循环?服务器代码要好得多。@raymond如果这听起来很愚蠢,很抱歉,但是我如何将传输模式设置为image?我将传输比image文件更多类型的文件。您使用
TYPE
命令。见RFC 959。