import socket server_ip = '10.132.11.225' server_port = 8000 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((server_ip, server_port)) server_socket.listen(1) print('等待客户端连接...') client_socket, client_address = server_socket.accept() print('客户端已连接:', client_address) with open('image.jpg', 'wb') as f: while True: data = client_socket.recv(1024) if not data: break f.write(data) print('图片已保存为image.jpg') client_socket.close() server_socket.close()可以保存多张照片
时间: 2024-03-24 15:39:58 浏览: 126
open-cv,haarcascade_frontalface_default.xml人脸检测模型包
好的,如果需要保存多张照片,可以在循环中增加一些逻辑来实现。具体来说,可以在每次接收到数据时,先判断是否是一个新的照片的开始,如果是,则将之前的照片保存到文件中,并开始接收新的照片。下面是一个可能的实现:
```python
import socket
def receive_images(server_ip, server_port):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((server_ip, server_port))
server_socket.listen(1)
print('等待客户端连接...')
client_socket, client_address = server_socket.accept()
print('客户端已连接:', client_address)
filename = None
while True:
data = client_socket.recv(1024)
if not data:
break
if b'image_start' in data:
if filename is not None:
with open(filename, 'wb') as f:
f.write(image_data)
print(f'图片已保存为{filename}')
filename = f'image_{int(time.time())}.jpg'
image_data = b''
elif filename is not None:
image_data += data
if filename is not None:
with open(filename, 'wb') as f:
f.write(image_data)
print(f'图片已保存为{filename}')
client_socket.close()
server_socket.close()
```
在这个函数中,我们使用一个变量 `filename` 来保存当前正在接收的照片的文件名,使用一个变量 `image_data` 来保存当前正在接收的照片的数据。在每次接收到数据时,我们首先判断是否是一个新的照片的开始,如果是,则将之前的照片保存到文件中,并开始接收新的照片。如果不是新的照片的开始,且当前正在接收照片的数据不为空,则将数据添加到 `image_data` 中。最后,在循环结束时,如果 `filename` 不为空,则将最后一个照片保存到文件中。
需要注意的是,由于我们使用了 `time.time()` 来作为文件名的一部分,因此需要在函数开头添加 `import time` 语句。另外,在客户端发送照片时,需要在每个照片的开始处发送一个标志,例如可以使用 `b'image_start'` 来表示一个新的照片的开始。
阅读全文