简单的Java聊天应用程序阅读图像

时间:2014-12-12 09:21:15

标签: java client-server java-io javax.imageio

我尝试创建一个聊天应用程序,但遇到两个问题,第一个发送表情符号时,它显示如下 enter image description here

这是我的代码(发送表情符号)

private void sendEmotion(ImageIcon emoticon, URL url) {

    try {
        Image image = emotion.getImage();
        listModel.addElement(emoticon);
        jList2.setModel(listModel);
        BufferedImage img = ImageIO.read(new File(url.toURI()));
        ImageIO.write(img, "png", s.getOutputStream());
    } catch (Exception ex) {
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
    }
}

阅读文字和表情符号

 br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        while (true) {
            // To read text
            String st = br.readLine();
            listModel.addElement(st);
           jList1.setModel(listModel);
            //to read imge
              BufferedImage image = ImageIO.read(socket.getInputStream());

              ImageIO.write(image, "png", new File("e:/image.png"));
              listModel.addElement(image);
              jList1.setModel(listModel);

        }
    } catch (IOException ex) {
        Logger.getLogger(MainServer.class.getName()).log(Level.SEVERE, null, ex);
    }

第二个问题,当从服务器向客户端发送文本和图像时,客户端无法同时读取(文本或图像,而不是两者)

3 个答案:

答案 0 :(得分:1)

我不相信你真的需要在表情符号的情况下发送图像。这些表情符号具有字符串表示形式,例如:):(。因此,当发送表情符号时,您可以包含相应的字符串,并在接收者一侧将该字符串与必要的表情符号匹配,并显示本地保存的图像。

答案 1 :(得分:0)

回答您的查询以发送表情符号:您在所有客户端都有相同的笑脸组合,我会说维护一个表情符号为笑脸,传递所选笑脸的标识符而不是图像并相应地渲染。

答案 2 :(得分:0)

在同一底层Socket上混合缓冲和非缓冲流是不可能的。缓冲流(在本例中为BufferedReader)将从您尝试读取图像的无缓冲流中“窃取”数据。以某种方式对两者使用相同的流,例如,通过DataOutputStream.writeUTF()DataInputStream.readUTF().