有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

客户端服务器简单java聊天应用程序读取图像

我试图创建一个聊天应用程序,但面临两个问题,第一个问题是在发送表情符号时,它显示如下 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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

  3. # 3 楼答案

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