2013-09-02 3 views
0

Я создал приложение, в котором сервер (рабочий стол) отправляет данные и файлы через сокет нескольким клиентам на андроиде, которые подключены, и все объекты сокета клиента хранятся в хэш-наборе.отправка изображения через сокет без закрытия сокета

Теперь проблема заключается в том, когда я отправляю данные, которые он отлично работает, но в случае отправки изображений, если мы не закрыли сокет, изображение не достигнет клиента. Если сокет закрыт, изображения доходят до клиента, но если при закрытии сокета, и когда я попытался отправить некоторые данные или файлы снова, будет закрыто исключение Socket.

Можно ли отправлять изображения без закрывающей розетки? Может кто-нибудь пожалуйста, скажите мне какое-то решение для этого

Моего кода, как указано ниже

BufferedImage bimg; 
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {           
     String iteamnam=iteamname.getText(); 
     try { 
      int i= dbGetDet.insertDetails("INSERT INTO hotel_items (item,descs,status,section,imagename) VALUES ('"+iteamnam+"','null','active','pub','pizza.png')"); 
      if(i>0) 
      { 
      JOptionPane.showMessageDialog(rootPane, "<html><body>New Iteam Added</b></body></html>"); 
      fillIteams(); 
      fillSubIteams(); 
      TABhs = new CopyOnWriteArraySet(TABhs); 
      System.out.println("Adding new Iteams Processing--------------------->"+TABhs.size()); 
      for(Iterator <Socket> it=TABhs.iterator();it.hasNext();) 
      { 
       Socket so=it.next(); 
       PrintWriter ot = new PrintWriter(so.getOutputStream()); 
       ot.println("mainiteams#"+iteamnam+"#pizza.png#pub"); 
       ot.flush(); 
       bimg = ImageIO.read(new File("C:/div.png")); 
       ImageIO.write(bimg,"PNG",so.getOutputStream()); 
       so.close(); //if close image will reach the client section (android) 
      } 
      } 


     } catch (Exception ex) { 
      Logger.getLogger(MYClientclass.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    }  
+0

Для этого вам не нужен ImageIO. Просто прочитайте и напишите байты. – EJP

+0

также, что такое "datas" vs "images"? – xaxxon

ответ

1

сокетов буферизации (и данные фактически отправляются в пакетах по сети). Вам нужно будет сбросить поток, чтобы вытолкнуть все изображение. Попытка:

OutputStream os = so.getOutputStream(); 
PrintWriter ot = new PrintWriter(os); 
ot.println("mainiteams#"+iteamnam+"#pizza.png#pub"); 
ot.flush(); 
bimg = ImageIO.read(new File("C:/div.png")); 
ImageIO.write(bimg,"PNG",os); 
os.flush() 
Смежные вопросы