通过套接字发送图像而不关闭套接字

时间:2013-09-02 10:28:25

标签: java android sockets

我创建了一个应用程序,其中服务器(桌面)通过套接字将数据和文件发送到android上连接的多个客户端,所有客户端套接字对象都存储在一个哈希集中。

现在问题是当我发送数据时工作正常但是在发送图像的情况下,如果我们没有关闭套接字,图像就不会到达客户端。如果socket被关闭,图像会到达客户端,但是如果套接字关闭,当我尝试再次发送一些数据或文件时,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);
        }
    }       

1 个答案:

答案 0 :(得分: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()