Przesylanie pliku przez TCP/IP

0

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 :/

0

Sorka, za double'a ale nie mam opcji edycji.
Dodatkowo, zauwazylem, ze ten bledny odczyt wystepuje zawsze w innym miejscu, raz przesle sie 1/20 danego pliku a innym razem polowa tego samego pliku.

0

Moze ktos pomoc?

1 użytkowników online, w tym zalogowanych: 0, gości: 1