2013-04-19 4 views
0

Я пытаюсь сделать приложение клиент-сервер, который имя списка серверов доступных изображений и клиент выбрать один из них для загрузки Такие, как здесь:Отправка изображения через сокет TCP в Java

Ветка на сервере

public void run() 
    { 


      try { 

      in = new DataInputStream (server.getInputStream()); 
      out = new DataOutputStream(server.getOutputStream()); 
      out.writeUTF("To List images write list"); 
      out.writeUTF("To Exit write 2"); 
      out.flush(); 
      while((line = in.readUTF()) != null && !line.equals("2")) { 

       if(line.equalsIgnoreCase("list")) 
       { 
        String [] images= processor.listImages(); 
        for (int i=0;i<images.length;i++) { 
         out.writeUTF((+1)+"-"+images[i]); 
         out.flush(); 
         line = ""; 
        } 
        out.writeUTF("-1"); 
        line = in.readUTF(); 

        if(line.equalsIgnoreCase("2")) 
        { 
         break; 
        }else 
        { 
             BufferedImage img =processor.processInput(line); 

             boolean cc = ImageIO.write(img,"JPG",server.getOutputStream()); 
         if(!cc) 
         { 
              out.writeUTF("The entered image is not avaliable !"); 
         }else 
         { 
              System.out.println("Image Sent"); 
         } 
        } 

       }else if(line.equalsIgnoreCase("2")){ 
        break; 
      } 
      } 
       try{ 
        in.close(); 
        out.close(); 
        server.close(); 
       }catch(Exception e){ 
        System.out.println("Error : "+ e.getMessage()); 
       } 

      } catch (IOException e) { 
      System.out.println("IOException on socket listen: " + e.getMessage()); 
      } 

    } 

Клиент:

public void start() throws IOException 
    { 
     String line=""; 

       while(true) 
       { 
        try{ 

         line = inputFromStream.readUTF(); 
         System.out.println(line); 
         line = inputFromStream.readUTF(); 
         System.out.println(line); 
         line = readFromConsol.readLine(); 

         writeToStream.writeUTF(line); 

         if(line.equalsIgnoreCase("2")){ 
          break; 
         }else if(line.equalsIgnoreCase("list")){ 
          boolean check=true; 
          while(check){ 
           line = inputFromStream.readUTF(); 
           System.out.println(line); 
           if("-1".equals(line)) { 
            check=false; 
           } 
          } 
          line = readFromConsol.readLine(); 
          if(line.equalsIgnoreCase("2")) { 
           break; 
          }else 
          { 
          writeToStream.writeUTF(line); 
          BufferedImage img=ImageIO.read(
            ImageIO.createImageInputStream(client.getInputStream())); 
          File f = new File("E:/MyFile.png"); 
          f.createNewFile(); 
          ImageIO.write(img, "PNG", f); 
          //process.saveImage(tmp); 
          System.out.println("Saved"); 
          } 


         } 
        }catch(Exception e) 
        { 
         System.out.println(e); 
        break; 
        } 
       } 
       try{ 
        inputFromStream.close(); 
        readFromConsol.close(); 
        writeToStream.close(); 
        this.client.close(); 
       }catch(Exception e){ 
        System.out.println("Error : "+e.getMessage()); 
       } 
    } 

проблема заключается в том что все команды успешно отправлены до тех пор, пока изображение, получающее изображение, не остановится, не перемещается.

+0

Где ваша программа останавливается точно? – prasanth

+0

здесь идет BufferedImage img = ImageIO.read ( ImageIO.createImageInputStream (client.getInputStream())); и никогда не выходить из него. – Alyafey

+0

Попробуйте этот пример. http://easywayprogramming.blogspot.in/2012/06/sending-image-object-through-socket-in.html – prasanth

ответ

0

Попробуйте выполнить сброс выходного потока на отправляющем сокете, а затем закройте сокет.

Проблема заключается в том, что до тех пор, пока розетка не будет промыта и не закрыта, принимающий IOImage.read() будет ожидать, что в потоке будет больше изображений.

Смежные вопросы