[Java] problem z przesylem jpg

Odpowiedz Nowy wątek
2006-07-26 15:41
Latino
0

Witam niedawno rozpoczolem przygode z java i jako pierwszy cel postawilem sobie za zadanie napisac zdalny pulpit. Wymyslilem sobie to tak ze najpierw zaimplementuje funkcje przesylajaca screeny z serwera do clienta a pozniej dolacze funkcje do obslugi myszki. No i mam problem z przesylaniem jpg. w zamieszczonym kodzie nie przesylam screenow z takiego powodu, ze rozmiar tablicy do ktorej pakuje screenshot zwieksza sie gdy ekran ma wiecej kolorow niz gdy np robi sie screen samej konsoli i takto po stronie klienta nalezalo by rozmiar tej tablicy tez zmienic, moge to zrobic wysylajac wczesniej ten rozmiar ale to by za dlugo trwalo samo to przesylanie(po uruchomieniu zalaczonego kodu widac w jakim tempie przesylane sa te zdjecia co wiecej rozmiar wysylanego zdjecia nie zgadza sie z rozmiarem otrzymywanego o jakies 30 bitow czemu??). Wiem o istnieniu ImageIO.write(.....) funkcja daje mozliwosc zapisuje bezposredno do strumienia ale nie chce sie pomylic w osadzie it sucks :/ poniewaz nie wiem czemu ale musze zamknac polaczenie zeby sie prawidlowo przeslalo albo cos robie zle. Prosze o szczery osąd i jakas podpowiedz??
server side

import java.net.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
import java.util.*;
public class server{
        private ServerSocket socket;
        private int port=8189;
        public static void main(String args[]){
                final server obiekt=new server();
                obiekt.connect();
                obiekt.run();
        }
        public void connect(){
                try{
                        socket=new ServerSocket(port,100,InetAddress.getByName("127.0.0.1"));
                }
                catch(Exception blad){
                        System.out.println("wystapil blad tworzenia placzenia");
                }
        }
        public void run(){
                try{
                        Socket gniazdo=socket.accept();;
                        while(true){
                        BufferedImage img=ImageIO.read(new File("Dsc01972.jpg"));
                        BufferedOutputStream outPut=new BufferedOutputStream(gniazdo.getOutputStream());
        ByteArrayOutputStream bas=new ByteArrayOutputStream();
                        ImageIO.write(img,"jpg",bas);
                        byte data[]=bas.toByteArray();
                        System.out.println(data.length);
                        outPut.write(data,0,data.length);
                        outPut.flush();
                        InputStream input=gniazdo.getInputStream();
                        byte odpowiedz[]=new byte[8];

                        while(true){
                                if(input.available()>0){
                                break;
                                }
                        }
                }
                }
                catch(Exception blad){
                        System.out.println("blad polaczenia");
                }

        }
}

client side

import java.net.*;
import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
public class client{
        private int port=8189;
        private String adres="localhost";
        private Socket socket=null;
        private DataInputStream inStream;
        public static void main(String args[]){
                final client obiekt=new client();
                obiekt.connect();
                obiekt.run();
        }
        public void connect(){
                try{

   socket=new Socket(adres, port);
                        System.out.println("nawiazano polaczenie "+socket.getInetAddress()+":"+socket.getPort());
                }
                catch(UnknownHostException e){
                        System.out.println("nieznany blad");
                }
                catch(Exception blad){
                        System.out.println("blad nawiazywania polaczenia");
                }
        }
        public void run(){
                try{
                while(true){
                        inStream=new DataInputStream(socket.getInputStream());
                        byte tablica[]=new byte[240759];
                        try{
 inStream.readFully(tablica);
                        }
                        catch(Exception aaa){
                                System.out.println("blad przeyslu");
                        }
                        ByteArrayInputStream wejscie=new ByteArrayInputStream(tablica);

                        BufferedImage zdjecie=ImageIO.read(wejscie);
                        ImageIO.write(zdjecie,"jpg",new File("lol.jpg"));
                        ByteArrayOutputStream bas=new ByteArrayOutputStream();
                        ImageIO.write(zdjecie,"jpg",bas);
                        byte data[]=bas.toByteArray();
                        System.out.println("dlugosc tablicy to "+data.length);
                        OutputStream output=socket.getOutputStream();
                        String napis="dostalem";
                        byte tabl[]=napis.getBytes();
   output.write(tabl);
                        }
                }
                catch(Exception e){
                        System.out.println("Blad tworzenia strumienia");
                }
        }
}

Pozostało 580 znaków

2006-07-26 15:45
Latino
0

Na koncu kodu obu plikow otwieranie po stronie klienta outputstream w celu wyslania stringa a po stronie serwera inputstrem to po to abo serwer czekal z wysylanie na otrzymanie potwierdzenia ze strony klienta, bez tego serwer wysylal troszke szybciej niz to klient dostawal i nie iwem czy to by nie bylo przyczyna pozniejszych bledow ale znow moge sie mylic. Wiem ze gotowe odpowiedzi sa najprostrze wiec o nie nie prosze lecz o wskazowke (mam dosc google wiec prosz o pomoc).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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