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