Някои файлови формати са повредени през FTP

Написах сървър и клиент за прилагане на FTP и ако създам текстови файлове и ги изпратя, те работят добре. но веднага щом изпратя файлове с други формати, полученият файл от страна на клиента е повреден. тук е кодът, където изпращам файла

           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 - Обект 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");

използвам ли правилните потоци?


person Aatish Molasi    schedule 06.09.2011    source източник
comment
Запомнихте ли да зададете режима на прехвърляне на ИЗОБРАЖЕНИЕ?   -  person Raymond Chen    schedule 06.09.2011
comment
Защо използвате различни цикли на четене в сървъра и клиента? Кодът на сървъра е много по-добър.   -  person user207421    schedule 07.09.2011
comment
@raymond съжалявам, ако това звучи глупаво, но как да настроя режима на прехвърляне на изображение също така няма да прехвърля повече типове файлове, отколкото файлове с изображения   -  person Aatish Molasi    schedule 07.09.2011
comment
Използвате командата TYPE. Вижте RFC 959.   -  person Raymond Chen    schedule 07.09.2011


Отговори (1)


Изглежда, че изпращате двоични файлове в ASCII режим.

Изпратете TYPE I вместо TYPE A на контролния канал, преди да настроите канала за данни, като изпратите PORT или PASV команда.

person AlexPace    schedule 13.09.2011