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

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ć ?

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.

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");
1

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());
0

No nareszcie coś działa.Dzięki

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