我编写了一个基本的java服务器端聊天应用程序。
目前我正在使用DataInputStream
和readUTF()
,它只是传输文字。
任何人都知道在文本旁边(或不在旁边)发送图像的最佳方式吗?
我对java及其软件包相当陌生,所以任何建议都很好:)
答案 0 :(得分:2)
要编写图像,请使用ImageIO:
BufferedImage img = ImageIO.read(new File("c:\test\img.png"));
ImageIO.write(img,"png", <out writer variable>);
对于阅读图像,请使用ImageIO:
BufferedImage img = ImageIO.read(ImageIO.createImageInputStream(<socket input stream variable>));
注意: readUTF
无效,因为它用于读取UTF字节
答案 1 :(得分:1)
我只做了好几次而且没有正式的设置。据说这很可能不在任何套接字流上执行图像传输的正确方法,所以如果有人对正确的方法有任何见解,请分享。
在你发来回拨打的所有数据中,标题都是128字节,这个标题包含有关你发送过的数据内容的信息。
假设您有客户端A并且他们想要将图像发送给他们的朋友客户B.客户端a发送包含消息的数据包:“FILE 45000 myimage.bmp”(您应该找到更好的方式来发送标题而不是从FILE开始,比如发送图像的数字2和发送消息的数字1。发送文件大小,文件名称以及稍后您可以获得技术并通过校验和发送。
然后,客户端A将开始流式传输所有标题为相同标题信息的数据。然后,客户端B将接收数据并在其进入时开始组装。如果出现的消息不以“文件”开头,您可以确定如何处理该数据包(可能是文本消息或其他内容)。 / p>
我要放在这里的主要是伪代码,因为我真的不知道你的代码是什么样子但它看起来像这样:
DataInputStream in = new DataInputStream(/*your sockets inputstream*/);
FileOutputStream out = new FileOutputStream(new File("c:\\myfile"));
int numRead = 0;
byte[] bytes = new byte[1024];
while((numRead = in.read(bytes)) != -1) {
String header = new String(bytes, 0, 128);
if(header.startsWith("TEXT")) {
// send text to your chat box
String content = new String(bytes, 128, bytes.length-128);
} else if(header.startsWith("FILE")) {
// write the remainder of the file to the harddrive
out.write(bytes, 128, bytes.length-128);
}
}
这是所有可以玩的东西,并且会出错和修复。刚接触java是关于试错的问题,如果您有任何疑问请发布,或者如果有人有任何链接到正确的标题发送或分隔符请输入!