我尝试创建一个聊天应用程序,但遇到两个问题,第一个发送表情符号时,它显示如下
这是我的代码(发送表情符号)
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);
}
第二个问题,当从服务器向客户端发送文本和图像时,客户端无法同时读取(文本或图像,而不是两者)
答案 0 :(得分:1)
我不相信你真的需要在表情符号的情况下发送图像。这些表情符号具有字符串表示形式,例如:)
或:(
。因此,当发送表情符号时,您可以包含相应的字符串,并在接收者一侧将该字符串与必要的表情符号匹配,并显示本地保存的图像。
答案 1 :(得分:0)
回答您的查询以发送表情符号:您在所有客户端都有相同的笑脸组合,我会说维护一个表情符号为笑脸,传递所选笑脸的标识符而不是图像并相应地渲染。
答案 2 :(得分:0)
在同一底层Socket
上混合缓冲和非缓冲流是不可能的。缓冲流(在本例中为BufferedReader
)将从您尝试读取图像的无缓冲流中“窃取”数据。以某种方式对两者使用相同的流,例如,通过DataOutputStream.writeUTF()
和DataInputStream.readUTF().