Witam, mam taki problem, przy próbie wysłania pliku....
fragment wysylajacy plik
public void wyslij(String nazwa){
try {
DataOutputStream os = new DataOutputStream(gniazdko.getOutputStream());
File plik = new File(nazwa);
System.out.println(nazwa);
DataInputStream ifs = new DataInputStream(new FileInputStream(plik));
byte[] data = new byte[1024];
System.out.println("Wysyłam plik " + nazwa);
/* Przysyłanie pliku */
int read;
while (-1 != (read = ifs.read(data, 4, data.length-4))){
//System.out.println("****************************");
System.out.println("read od wyslij "+read);
byte[] count = new byte[4];
count = konwertowanie.intToByte(read);
for (int i = 0; i < 4; i++) {
data[i] = count[i];
}
System.out.println("po kowersji "+konwertowanie.byteToInt(count));
os.write(data);
os.flush();
}
System.out.println("plikwyslany");
/* Przesłanie ciągu bajtów oznaczjących koniec pliku.*/
for (int i = 0; i < END_FILE.length; i++) {
data[i] = END_FILE[i];
}
os.write(data,0,END_FILE.length);
os.flush();
System.out.println("Zakonczono wysylanie pliku " + nazwa);
System.out.println("stopkawyslana");
} catch (FileNotFoundException e){
System.out.println("Nie znaleziono wskazanego pliku.");
System.err.println(e);
}
catch (IOException e) {
e.printStackTrace();
}
}
Fragment odbierajacy plik:
public int sciagajplik(String polozenie, String skrot){
try {
DataInputStream is = new DataInputStream(gniazdko.getInputStream());
File plik = new File(polozenie);
ReadFileByteArray nabajty = new ReadFileByteArray();
SHA1 sha1 = new SHA1();
plik.createNewFile();
DataOutputStream ofs = new DataOutputStream(new FileOutputStream(plik));
byte[] data = new byte[1024];
//int qq=0;
is.read(data);
while (konwertowanie.compareByte(data, END_FILE) != 0) {
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
System.out.println(data[3]);
byte [] data1= {data[0],data[1],data[2],data[3]};
int count = konwertowanie.byteToInt(data1);
System.out.println("count = " + count);
//System.out.println("data = " + data[qq]+" "+ data[qq+1]+" "+ data[qq+2]+" "+ data[qq+3]);
//qq=qq+4;
ofs.flush();
ofs.write(data, 4, count);
is.read(data);
}
ofs.close();
/* porównaie sumy kontrolnej */
sha1.init();
sha1.update(nabajty.bajty(plik));
sha1.finish();
String skrot2 = sha1.digout();
if (skrot2.compareTo(skrot) == 0){
System.out.println("Pobieranie pliku zakonczone powodzeniem");
MainProg.jTextField1.setText("Plik został pobrany");
return 0;
} else{
System.out.println("Pobieranie pliku zakonczone niepowodzeniem");
MainProg.jTextField1.setText("Nie udało się pobrać pliku");
return 1;
}
} catch (IOException e) {
System.out.println("Błąd wejścia wyjścia");
System.err.println(e);
}
return 2;
}
W kazdej "paczce" przesylam 1024 bajty, z czego pierwsze cztery bajty to po konwersji na inta liczba bajtow z 1020 kolejnych ktore faktycznie sa przesylane.
Z tego co zdazylem zauwazyc, to na poczatku kilka "paczek" idzie dobrze, a w ktorejs z kolejnych wysylane sa te same 4 bajty co zwykle, ktore po konwersji na int-a powinny dac 1020, ale odbierane bajty sa zupelnie inne, i po konwersji na int-a daja jakies kosmiczne liczby.
Doda, ze probelm wystepuje tylko, kiedy plik wysylany jest w sieci, jesli jeden komputer jest serwerem i klientem zarazem plik przesyla sie poprawnie.
Czy ktos moglby mi podpowiedziec w ktorym miejscu jest blad? Bo sam siedze i siedz ei nie moge go znalezc :/