• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javafx wysylanie plikow

Object Storage Arubacloud
0 głosów
165 wizyt
pytanie zadane 17 sierpnia 2017 w Java przez Patryk Rafał Bywalec (2,700 p.)
Witam, piszę sobie multichat w javie sam czat mam już zrealizowany jednakże chciałbym dodać następującą funkcjonalność wysyłanie dowolnego pliku do wybranego użytkownika czytałem już sporo forów jednakże nigdzie nie znalazłem odpowiedzi która pomogła by mi zrealizować ten cel, z góry dziękuję za każdą pomoc

1 odpowiedź

0 głosów
odpowiedź 17 sierpnia 2017 przez mbabane Szeryf (79,280 p.)

Wydaje mi sie ze mozna to zrobic tak:

Po stronie nadawcy:

  1. Otwierasz plik
  2. Wysylasz wiadomosc jaki typ pliku wysylasz.
  3. Pobierasz zawartosc
  4. Wysylasz zawartosc
  5. Po wyslaniu zamykasz plik.

Po stronie odbiorcy

  1. Odbierasz jaki typ pliku zostanie przeslany
  2. Odbierasz zawartosc
  3. tworzysz nowy plik o odebranym typie (txt, jpg).
  4. Wrzucasz odebrana zawartosc

Jesli nie bawiles sie obsluga plikow to sprobuj najpierw zrobic np. "kopiarke" tj. program ktory tworzy kopie pliku (bez przesylania). 

komentarz 18 sierpnia 2017 przez Patryk Rafał Bywalec (2,700 p.)
chciałbym zrobić coś takiego jak na facebooku czyli że masz browser plików i wysyłam do konkretnego użytkownika od innego usera
komentarz 18 sierpnia 2017 przez mbabane Szeryf (79,280 p.)
http://docs.oracle.com/javafx/2/ui_controls/file-chooser.htm

Po Polsku pewnie tez cos sie znajdzie
komentarz 20 sierpnia 2017 przez Patryk Rafał Bywalec (2,700 p.)

Witam żeby już nie zakładać nowego tematu to zadam pytanie tu 

java.io.UTFDataFormatException: malformed input around byte 0
	at java.io.DataInputStream.readUTF(DataInputStream.java:656)
	at java.io.DataInputStream.readUTF(DataInputStream.java:564)
	at Client.ClientNetwork.createClient(ClientNetwork.java:110)
	at Client.ClientOkno.lambda$CreateContent$0(ClientOkno.java:76)
	at java.lang.Thread.run(Thread.java:745)
java.io.UTFDataFormatException: malformed input around byte 5
	at java.io.DataInputStream.readUTF(DataInputStream.java:656)
	at java.io.DataInputStream.readUTF(DataInputStream.java:564)
	at Client.OdbierzPlik.start(OdbierzPlik.java:39)
	at Client.ClientProtokol.ustawienie(ClientProtokol.java:81)
	at Client.ClientNetwork.createClient(ClientNetwork.java:107)
	at Client.ClientOkno.lambda$CreateContent$0(ClientOkno.java:76)
	at java.lang.Thread.run(Thread.java:745)

podpowie ktoś bo walczę już 2 dzień z tym wyjątkiem przy wysyłaniu plików ?

komentarz 20 sierpnia 2017 przez mbabane Szeryf (79,280 p.)
musisz pokazac wiecej kodu
komentarz 20 sierpnia 2017 przez Patryk Rafał Bywalec (2,700 p.)
to jest dość duży projekt i nie wiem zabardzo jak ci go udostępnić
komentarz 20 sierpnia 2017 przez mbabane Szeryf (79,280 p.)
Daj tylko ta czesc co jest to przesylanie plikow.
komentarz 21 sierpnia 2017 przez Patryk Rafał Bywalec (2,700 p.)
tu opracowałem sobie swój protokół

public void podzialProtokol(String wiadomosc) throws FileNotFoundException, IOException {

        if (this.server.getClientListSize() == 1) {
            this.server.send("pusto" + "::");
        }

        String podzial[] = wiadomosc.split("::");

        switch (podzial[0]) {
            case "nick": {
                this.server.send(this.server.sendAllNick(podzial[1]));
                this.server.sendToAll("add new user");
                break;
            }
            case "nick update": {
                this.server.send("nowy " + "::" + this.server.sendAllNick(podzial[1]));
                break;
            }
            case "aktualizacja": {
                this.server.send("nowy " + "::" + this.server.sendAllNick(podzial[1]));
                break;
            }
            case "send": {
                System.out.println(wiadomosc);
                String send = "send" + "::" + "Od " + podzial[1] + "-->" + podzial[3];
                if (this.server.czyJest(podzial[2])) {
                    this.server.wyslijDo(podzial[2], send);
                } else {
                    this.server.send("Nie ma takiej osoby" + "::" + podzial[2]);
                }
                break;
            }
            case "cmd_plik": {
                if (this.server.czyJest(podzial[1])) {
                    Platform.runLater(() -> {
                        try {
                            new RepleyFromServer(this.server.getSokcet(), server,podzial[1],podzial[2],podzial[3]).start();
                        } catch (IOException ex) {
                            Logger.getLogger(ServerProtokol.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    });
                }
                break;
            }
        }

metoda która przesyłam odczytane dane i przakazuje do protokołu
@Override
        public void run() {

            try {
                this.dos = new DataOutputStream(socket.getOutputStream());
                this.dis = new DataInputStream(socket.getInputStream());
                this.uzytkownicy();

                while (socket.isConnected()) {

                    String wiadomosc = this.czytaj();
                    this.protokol.podzialProtokol(wiadomosc);

                }

            } catch (IOException ex) {
                this.kasujNick(this.getUser());
                text.appendText("Zamykanie " + this.getUser() + "\n");
                this.sendToAll("Zamykanie " + "::" + this.getUser());
            }

        }

       
    }

tu wysyłam do konkretnego użytkownika z czatu

 public void start() throws IOException {

        this.aThis.wyslijDo(nick, "cmd_plik" + "::");
        Platform.runLater(() -> {
            try {
                   
                File myFile = new File(path);
                byte[] mybytearray = new byte[(int) myFile.length()];
                FileInputStream fis = new FileInputStream(myFile);
                BufferedInputStream bis = new BufferedInputStream(fis);
                this.dis = new DataInputStream(bis);
                dis.readFully(mybytearray, 0, mybytearray.length);
                this.aThis.wyslijDo(nick, nazwa);
                this.aThis.wyslijDoInt(nick, mybytearray.length);
                this.aThis.wyslijDoIntTab(nick, mybytearray, 0, mybytearray.length);
                try {
                    fis.close();
                    bis.close();
                   
                } catch (IOException ex) {
                    Logger.getLogger(ActionListener.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(RepleyFromServer.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(RepleyFromServer.class.getName()).log(Level.SEVERE, null, ex);
            }

        });
    }

a tam odbieram plik

 public void start() throws IOException {
        
        int bytesRead;
        InputStream in = this.cNetwork.getSokcet().getInputStream();

        DataInputStream clientData = new DataInputStream(in);

        String fileName = clientData.readUTF();
        OutputStream output = new FileOutputStream(
                (fileName));
        long size = clientData.readLong();
        byte[] buffer = new byte[1024];
        while (size > 0
                && (bytesRead = clientData.read(buffer, 0,
                        (int) Math.min(buffer.length, size))) != -1) {
            output.write(buffer, 0, bytesRead);
            size -= bytesRead;
        }
        output.flush();
 
    }

dodam że to wszystko opiera się na wątkach, jeżeli przesyłam do pierwszego wątku jest w porządku czyli przesyła się dobrze zaś jak wysyłam z pierwszego do drugiego to jakby gubiło mi bajty, mam nadzieje że zrozumiale napisałem 

komentarz 21 sierpnia 2017 przez mbabane Szeryf (79,280 p.)
hmm... samo przesylanie zawartosci pliku niczym szczegolnym nie rozni sie od przesylania wiadomosci pobranej z klawiatury, zmienia sie tylko zrodlo danych.
komentarz 21 sierpnia 2017 przez Patryk Rafał Bywalec (2,700 p.)
No nic sam musze to rozgryzc

Podobne pytania

0 głosów
2 odpowiedzi 137 wizyt
pytanie zadane 13 marca 2023 w Java przez elvis Nowicjusz (210 p.)
0 głosów
1 odpowiedź 219 wizyt
pytanie zadane 2 grudnia 2021 w Java przez DzikieHarce Użytkownik (690 p.)
0 głosów
0 odpowiedzi 372 wizyt
pytanie zadane 28 sierpnia 2020 w Java przez Kacper Sas Dyskutant (8,460 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...