Python socket传输图像文件
客户端发送图像文件
import socket
data= numpy.frombuffer(stringData, numpy.uint8) # 将获取到的字符流数据转换成1维数组
# decimg= cv2.imdecode(data, cv2.COLOR_BGR2GRAY) # 将数组解码成图像
# cv2.imwrite("./test.jpg",decimg)
# imencode()将图片格式转换(编码)成流数据,赋值到内存缓存中,主要用于图像数据格式的压缩,方便网络传输
result, imgencode = cv2.imencode('.jpg', decimg)
data = numpy.array(imgencode)
stringData = data.tostring()
# ljust()返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
client = socket.socket()
# 连接服务器
addr = ('127.0.0.1', 9999)
client.connect(addr)
sock.send(str.encode(str(len(stringData)).ljust(16)))
sock.send(stringData)
服务器读取图像文件
import socket
address = ('127.0.0.1', 9999)
# 创建socket对象,同时设置通信模式,AF_INET代表IPv4,SOCK_STREAM代表流式socket,使用的是tcp协议
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定到我们刚刚设置的ip和端口元组,代表我们的服务运行在本机的9999端口上
server.bind(address)
# 开始TCP连接监听,参数指定在拒绝连接之前,操作系统可以挂起的最大连接数量
# 该值至少为1,大部分应用程序设为5就可以了
server.listen(5)
buf = b'' # buf是一个byte类型
while count:
# 接受TCP套接字的数据。数据以字符串形式返回,count指定要接收的最大数据量.
newbuf = sock.recv(count)
if not newbuf:
return None
buf += newbuf
count -= len(newbuf)