2016-03-31 19 views
2

Soket sunucusundan (Python) Soket sunucusuna (Python) bir görüntü göndermeye çalışıyorum ancak istemcide alınan görüntünün hatalı bir boyutu var ve açılmıyor . Neyi yanlış yapıyorum bilmiyorum. Baska öneri?Resim Socket sunucusundan (java) soket istemcisine (python) gönderme

Sunucusu (Java):

... 
BufferedImage image = ImageIO.read (new File("c:\\tmp\\File.png")); 
ImageIO.write(image, "png", connectionSocket.getOutputStream()); 
... 

İstemci (Python):

try: 
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    client_socket.connect(host , port) 
    data = client_socket.recv(1024) 
    fp = open (path, "wb") 
    while data: 
     data = client_socket.recv(1024) 
     if data: 
      if not data: break 
      fp.write (data) 
      fp.flush() 
     fp.close() 
     client_socket.close() 
except: 
    print "could not connect to %s:%s " %(host, port 
+0

kullanım base64 kodlaması – Tokazio

+0

Eğer Sen tamamını almaya emin olmak için gönderilen kaç veri bilmelisiniz – ezzitt

+0

daha açıklayabilir misiniz ederiz TRANSFERT için onlar. Java'da, aktarımdan önce görüntü boyutunuzu (örneğin, 's') alın, önce 's' boyutunu python istemcisine gönderin, sonra bir sonraki veriyi okuyun. Else bunu alırken transfer ve okuma verileriniz için bir son sınırlayıcı kullanabilirsiniz. – Tokazio

cevap

1

sonra dize transfert, base64 dize (Java) için görüntü dönüştürme ve görüntü verilerinin geri almak (piton). java olarak

, base64 dizesinden Resmi almak için:

public static Image image(String base64Img) { 
byte[] b = DatatypeConverter.parseBase64Binary(base64Img); 
ByteArrayInputStream s = new ByteArrayInputStream(b); 
return new Image(s); 
} 
İlgili konular