0
几天前,我想编写我自己的图像客户端,通过HTTP直接传输图像。我用Google搜索和研究相当长的一段时间,写我的服务器:Java图像服务器:套接字写入错误
public class SConnection extends Thread {
Socket client;
/* ... */
@Override
public void run() {
while(true) {
try {
//Get some image paths
File folder = new File(new java.net.URI("file:///C:/images/"));
File[] images = folder.listFiles();
//Load the image
BufferedImage bi = ImageIO.read(images[0]);
//Write the image
ImageIO.write(bi, "JPEG", client.getOutputStream());
} catch (Exception ex) {
ex.printStackTrace();
return;
}
}
}
的主类是等待接受多个连接,将它们存储在一个ArrayList,创造SConnection的实例,并开始他们一个线程。
客户看起来是这样的:
URL target = new URL("http://127.0.0.1:82"); //The server - so far, so good
URLConnection conn = target.openConnection();
BufferedImage in = ImageIO.read(conn.getInputStream()); //And as I try to receive the image: boom, exception
File save = new File(new java.net.URI("file:///C:/images/result.jpeg"));
ImageIO.write(in, "JPEG", save);
服务器和客户端发送位于ImageIO.write/ImageIO.read例外 - 线。
服务器说:
java.net.SocketException: Connection reset by peer: socket write error
客户说:
java.io.IOException: Invalid Http response
我得到的,该图像是不正确传递,但我应该怎么改?任何线索?
谢谢你们,提前!
我不确定这会有帮助,但您应该关闭URLConnection中的InputStream。我的猜测是ImageIO.read()不会为你做。 – 2012-07-15 16:28:54
您是否尝试过简单地在客户端和服务器之间编写文本?您可能会遇到防火墙或权限问题,从而无法打开套接字,而忽略ImageIO会使其更易于调试。 – Edward 2012-07-15 16:34:06
jup,简单的基于文本的通信炒作就好了。我的猜测是,协议l有问题,因为我绝对不知道,客户端和服务器实际上正在转换,因为它们传输图像... 我在输入流和输出流上添加了闭合命令本身,但它仍然是一个例外.. – brickBreaker 2012-07-15 19:09:41