0
我試圖從Python 3.4使用套接字接收從Android到PC的圖像。我的服務器代碼如下:python3.4套接字服務器接收圖像
import socket
import struct
import sys
address = ("10.0.0.22", 5000)
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except (socket.error, msg):
print ('Failed to create socket.Error code:' + str(msg[0]) + ', Error message: ' + msg[1])
sys.exit()
print ('Socket Created')
s.bind(address)
s.listen(5)
while True:
(client, addr) = s.accept()
print ('got connected from', client,addr)
buf = b''
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)
print (data)
if not data:
break
img.write(data)
img.close()
print ('received, yay!')
client.close()
但它返回我一個tst.jpg比我的Android image.And小4個字節,我無法打開圖像。
這是我的Android代碼:
FileOutputStream fop;
Socket socket;
try {
fop=new FileOutputStream("/sdcard/dd.jpg");
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fop);
fop.close();
Toast.makeText(MainActivity.this, "saved",Toast.LENGTH_LONG).show();
InetAddress serverAdd = InetAddress.getByName("10.0.0.22");
SocketAddress sc_add = new InetSocketAddress(serverAdd,5000);
socket = new Socket();
socket.connect(sc_add,2000);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] bytes = baos.toByteArray();
out.write(bytes);
out.close();
socket.close();
}
您還可以先發送值爲0的四個字節,因爲python代碼除了只記錄它之外不會使用它。 – greenapps
我還有一個問題。爲什麼服務器寫圖像這麼慢。我該如何修改它?謝謝。 – jay
我看不出有多快。如果你不告訴我,我們永遠不會知道。 – greenapps