我試圖從客戶端發送多個圖像到服務器。來自我的客戶的 我一次發送一個圖像,然後爲每個圖像獲取服務器中的大小,然後將大小發送回客戶端,然後嘗試將所有圖像的大小存儲在表中。 我寫了這個代碼,它似乎並沒有工作:使用套接字發送圖像從客戶端到服務器python
client.py:
from PIL import Image
import glob
import sys
import pickle
import socket
import os
import numpy
reload(sys)
def readFileImages(strFolderName):
st = os.path.join(strFolderName, "*.png")
print st
return glob.glob(st)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
client_socket.bind(("127.0.0.1", 4000))
list1=readFileImages("test")
myoutput =[]
while (list1):
for im in list1:
f=open(im,"rb")
while True:
veri = f.read()
if not veri:
break
client_socket.send(veri)
f.close()
data = client_socket.recv(4096)
data_arr=pickle.loads(data)
newrow=numpy.asarray(data_arr)
myoutput=numpy.vstack([myoutput,newrow])
client_socket.close()
numpy.savetxt("testTable.csv",myoutput,delimiter=",")
server.py:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
s.bind(("127.0.0.1",4000))
s.listen(5)
client_socket, address = s.accept()
print "Connected to - ",address,"\n"
fname="test.png"
fp = open(fname,'wb')
# image
while True:
strng = client_socket.recv(1024)
if not strng:
break
fp.write(strng)
fp.close()
#T[0]=detect_carte_grise(fp)
im = Image.open(fp)
T= im.size #width,height
data=pickle.dumps(T)
client_socket.send(data)
,爲什麼我得到這個錯誤:[ errno98]地址已經在使用 我甚至不能連接到服務器
TCP是一個流。您需要某種協議來進行多個文件傳輸。最好,使用一些現有的,例如HTTP。 – Daniel
如果嘗試使用socket.sendall,會不會在協議下工作? – hamma
不需要。你需要一個協議。使用一些已經使用HTTP服務器,或看看他們的源代碼。 – Daniel