2014-04-26 60 views
0

我試圖從Python中使用套接字接收從Android到PC的圖像。我的服務器代碼如下:Python套接字服務器接收圖像

import socket 
address = ("10.0.0.12", 5000) 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(address) 
s.listen(1000) 


client, addr = s.accept() 
print 'got connected from', addr 

filename = open('tst.jpg', 'wb') 
while True: 
    strng = client.recv(1024) 
    if not strng: 
     break 
    filename.write(strng) 
filename.close() 
print 'received, yay!' 

client.close() 

然後它返回一個tst.jpg,它與我的Android上的大小相同。但我無法打開圖片。

這裏是我的Android代碼:

Socket photoSocket = new Socket(ipString, port); 
DataOutputStream dos = new DataOutputStream(photoSocket.getOutputStream()); 
FileInputStream fis = new FileInputStream(PhotoActivity.filePath); 
int size = fis.available(); 

byte[] data = new byte[size]; 
fis.read(data); 
dos.writeInt(size); 
dos.write(data); 

dos.flush(); 
dos.close(); 
fis.close(); 
photoSocket.close(); 
+0

對我來說似乎沒事。你如何發送? – Daniel

+0

'filename'不是名稱可能的建議。這是一個fileobject。 – Daniel

+0

@達尼爾知道,但那不是重點。其實看起來我的android代碼不好發送圖像。我會發布他們,請你看看它? – Zhiya

回答

1

所以Android的代碼發送大小數據的前INT,但Python代碼不會讀它。

import socket 
import struct 
address = ("10.0.0.12", 5000) 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(address) 
s.listen(1000) 


client, addr = s.accept() 
print 'got connected from', addr 

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

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

client.close() 
+0

它的工作!非常感謝你! – Zhiya