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

Javafx wysylanie plikow

Cloud VPS
0 głosów
269 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,260 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,260 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,260 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,260 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,260 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 273 wizyt
pytanie zadane 13 marca 2023 w Java przez elvis Nowicjusz (210 p.)
0 głosów
1 odpowiedź 297 wizyt
pytanie zadane 2 grudnia 2021 w Java przez DzikieHarce Użytkownik (690 p.)
0 głosów
0 odpowiedzi 496 wizyt
pytanie zadane 28 sierpnia 2020 w Java przez Kacper Sas Dyskutant (8,460 p.)

93,463 zapytań

142,459 odpowiedzi

322,727 komentarzy

62,840 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

Kursy INF.02 i INF.03
...