如何将JPG文件从服务器发送到客户端

时间:2020-01-17 16:44:33

标签: python sockets server client jpeg

我需要将JPG文件从服务器发送到客户端。我该怎么办?

服务器代码:

from PIL import ImageGrab
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((IP, PORT))
server_socket.listen(1)
client_socket, address = server_socket.accept()
image = ImageGrab.grab()
image.save(r'screen.jpg')
# client_socket.send( ? )

1 个答案:

答案 0 :(得分:1)

当我尝试发送大量数据时,client_socket.send(data)无法正常工作,因此我找到了解决方案:

BYTES_AMOUNT = 1024
def send_all(client_socket, data):
    while True:
        packet = bytes(data[:BYTES_AMOUNT])
        if not packet:
            break
        client_socket.send(packet)
        client_socket.recv(4)
        data = data[BYTES_AMOUNT:]


def receive_all(client_socket):
    data = bytes('')
    receiving = True
    while receiving:
        try:
            packet = client_socket.recv(BYTES_AMOUNT)
            client_socket.send('SEND')
        except Exception as error_msg:
            receiving = False
            packet = bytes('')
            print error_msg
        data += bytes(packet)
        if len(packet) < BYTES_AMOUNT:
            receiving = False
    return bytes(data)

然后:

发送:

with open('screen.jpg', 'rb') as handle:
    send_all(client_socket, handle.read())

接收:

received_data = receive_all(client_socket)
with open('received_file.jpg', 'wb') as handle:
    handle.write(received_data)