2017-04-19 21 views
0

クライアントからサーバーに複数の画像を送信しようとしています。 私のクライアントから私は一度に1つのイメージを送信し、次にイメージごとにサーバーのサイズを取得してから、クライアントにサイズを送り返してから、すべてのイメージのサイズをテーブルに保存してみます。 私はこのコードを書いて、動作していないよう:ソケット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))に変更してください。それは現在の問題を解決するでしょう。もしあなたがそれ以上持っていれば、別の質問をしてください。

関連する問題