Przesyłanie danych przez sieć przy użyciu klasy Socket

2016-06-14 21:16

Rejestracja: 5 lat temu

Ostatnio: 1 tydzień temu

0

Witam
Mam pytanie odnośnie przesyłania danych.
Na początku przesyłam trochę danych tekstowych (Stringi) używając DataInputStream oraz DataOutputStream i jest ok.Jednak problem pojawia się gdy chcę przesłać jakieś obrazki. Próbowałem już różnych metod (ObjectInput/Output Stream, jakieś rzutowania) jednak cały czas coś się chrzani. Jaki jest najprostszy sposób żeby sobie z tym poradzić ?

Pozostało 580 znaków

2016-06-14 23:01

Rejestracja: 4 lata temu

Ostatnio: 30 minut temu

Lokalizacja: UK

1

Tutaj jest jakiś przykład: http://www.rgagnon.com/javadetails/java-0542.html Pisząc "coś się chrzani" nie oczekuj wiele pomocy, wróżek tutaj mało.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.

Pozostało 580 znaków

2016-06-15 00:50

Rejestracja: 5 lat temu

Ostatnio: 1 tydzień temu

0

Zrobiłem test, ale nadal jest coś nie tak. "a" wypisuje się raz a "b" w ogóle

Serwer

DataOutputStream dataOutputStream;
File myFile = new File ("obrazek.jpg");
                      byte [] mybytearray  = new byte [(int)myFile.length()];
                      FileInputStream fis = new FileInputStream(myFile);
                      BufferedInputStream bis = new BufferedInputStream(fis);
                      bis.read(mybytearray,0,mybytearray.length);
                      dataOutputStream.write(mybytearray,0,mybytearray.length);
                      dataOutputStream.flush();
                      bis.close();

Klient


                    public static BufferedImage rysunek;
                DataInputStream dataInputStream;
                    byte [] mybytearray = new byte[6022386];
                int bytesRead;
                int current = 0;

                do {
                     bytesRead =
                     dataInputStream.read(mybytearray, current, (mybytearray.length-current));
                     if(bytesRead >= 0) current += bytesRead;
                    System.out.println("a");

                  } while(bytesRead > -1);

                 rysunek = ImageIO.read(new ByteArrayInputStream(mybytearray));
                System.out.println("b");
edytowany 3x, ostatnio: ast44, 2016-06-15 00:56

Pozostało 580 znaków

2016-06-15 09:04
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 minuta temu

Pisałem kiedyś sieciową przeglądarkę plików graficznych. Wysyłałem obrazki z serwera tak:

BufferedImage bi = ImageIO.read(file);
if(bi != null)
{                                                       
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      ImageIO.write(bi,"jpg",baos);
      baos.flush();
      byte[] imageInByte = baos.toByteArray();
      baos.close();
      oos.writeObject(imageInByte);
      //oos = new ObjectOutputStream(serverSocket.getOutputStream());
}

a czytałem tak:

byte[] imageInByte = (byte[])ois.readObject();
currentImage = ImageIO.read(new ByteArrayInputStream(imageInByte));
//ois = new ObjectInputStream(socket.getInputStream());

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans, 2016-06-15 17:29

Pozostało 580 znaków

2016-06-15 11:11

Rejestracja: 5 lat temu

Ostatnio: 1 tydzień temu

0

No nareszcie coś działa.Dzięki

Pozostało 580 znaków

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