2017-04-19 110 views
0

我試圖從客戶端發送多個圖像到服務器。來自我的客戶的 我一次發送一個圖像,然後爲每個圖像獲取服務器中的大小,然後將大小發送回客戶端,然後嘗試將所有圖像的大小存儲在表中。 我寫了這個代碼,它似乎並沒有工作:使用套接字發送圖像從客戶端到服務器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]地址已經在使用 我甚至不能連接到服務器

+0

TCP是一個流。您需要某種協議來進行多個文件傳輸。最好,使用一些現有的,例如HTTP。 – Daniel

+0

如果嘗試使用socket.sendall,會不會在協議下工作? – hamma

+0

不需要。你需要一個協議。使用一些已經使用HTTP服務器,或看看他們的源代碼。 – Daniel

回答

-1

我得到了同樣的錯誤,我改變了「端口號」。它的工作很好

0

首先,在服務器代碼中綁定到端口,但在客戶端代碼中,您需要連接到該服務器。您在兩個腳本中都有綁定,並且第一個正在運行的腳本已經使用了地址。所以在客戶端放置綁定並更改爲client_socket.connect(("127.0.0.1", 4000))。這將解決當前的問題,如果你還有其他問題,請提出另一個問題。

相關問題