2015-06-12 94 views
1

我一直在嘗試創建一個運行Java中的客戶端和Python中的服務器的程序。 我的總體目標是在Java上將客戶端上的圖片上傳到服務器上,並將其存儲在mysql服務器上。我還沒有嘗試過從Python上的圖像轉換爲在mysql上的blob,並已上傳到python階段。這是下面的代碼:從java上的客戶端發送圖像到python上的服務器

客戶:(JAVA)

 client.send("upload##user##pass##"); //this is how i know that upload request has been sent. 
     String directory = "/home/michael/Pictures/"+field.getText();// a valid directory of a picture. 
     BufferedImage bufferedImage = null; 
     try { 
      bufferedImage = ImageIO.read(new File(directory)); 
     } catch (IOException err) { 
      err.printStackTrace(); 
     } 

     try { 

      ImageIO.write(bufferedImage, "png", client.socket.getOutputStream());//sending the picture via socket. 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

這是服務器:(Python)的

elif mar[0]=="upload":##this is how i know that the request is to upload 

    buf = '' 
    while len(buf)<4: 
    buf += clientsock.recv(4-len(buf)) 
    size = struct.unpack('!i', buf) 
    print "receiving %s bytes" % size 

    with open('tst.jpg', 'wb') as img: 
     while True: 
     data = clientsock.recv(1024) 
     if not data: 
      break 
     img.write(data) 
    print 'received, yay!' 

這段代碼實際上不起作用,打印量可笑我想發送的字節(大約2 GB的圖片)我沒有和服務器/客戶端一起工作過很多,所以這段代碼可能很糟糕。

回答

0

我看不到您在發送圖像之前發送圖像大小,但在Python代碼中,您首先讀取4個字節的圖像大小。
您需要添加圖像大小的發送在Java代碼:

所有的
try { 
    OutputStream outputStream = client.socket.getOutputStream(); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    ImageIO.write(bufferedImage, "png", byteArrayOutputStream); 
    // get the size of image 
    byte[] size = ByteBuffer.allocate(4).putInt(byteArrayOutputStream.size()).array(); 
    outputStream.write(size); 
    outputStream.write(byteArrayOutputStream.toByteArray()); 
    outputStream.flush(); 
} catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 
+0

首先,感謝您的評論。 然而,它運行這個錯誤: 類型不匹配:不能從java.io.OutputStream中轉換爲org.omg.CORBA.portable.OutputStream中 這兩種類型似乎不是在第一行某種原因相同。 – Michael

+0

嘗試導入java.io.OutputStream而不是org.omg.CORBA.portable.OutputStream – Delimitry

+0

它的工作原理。我愛你。 – Michael

相關問題