Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用socket python将图像从客户端发送到服务器_Python_Python 2.7_Web Services_Client - Fatal编程技术网

使用socket python将图像从客户端发送到服务器

使用socket python将图像从客户端发送到服务器,python,python-2.7,web-services,client,Python,Python 2.7,Web Services,Client,我正在尝试将多个图像从客户端发送到服务器。 我从客户端一次发送一个图像,然后在服务器中获取每个图像的大小,然后将大小发送回客户端,然后尝试将所有图像的所有大小存储在一个表中。 我写了这段代码,但似乎不起作用: client.py: from PIL import Image import glob import sys import pickle import socket import os import numpy reload(sys) def readFileImages(strF

我正在尝试将多个图像从客户端发送到服务器。 我从客户端一次发送一个图像,然后在服务器中获取每个图像的大小,然后将大小发送回客户端,然后尝试将所有图像的所有大小存储在一个表中。 我写了这段代码,但似乎不起作用:

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]地址已在使用中
我甚至无法连接到服务器

我遇到了相同的错误,我更改了端口号。首先,在服务器代码中绑定到端口,但在客户端代码中,需要连接到该服务器。您在两个脚本中都进行了绑定,并且第一个运行的脚本已经使用了地址。因此,在客户端中,删除绑定并更改为client_socket.connect127.0.0.14000。这将解决当前的问题,如果您还有其他问题,请提出另一个问题。

TCP是一个流。您需要某种用于多文件传输的协议。最好使用一些现有的协议,例如HTTP.what if try socket.sendall。如果没有协议,它会工作吗?不,你需要一个协议。使用一些已经在使用HTTP服务器,或者查看它们的源代码。您可以一次读取1024字节的图像并按顺序发送。服务器可以接收每个1024字节的区块,并可以重新创建映像文件。