Member 12746605 Ответов: 0

Как инициировать двунаправленную передачу файлов между сервером и клиентом с помощью сокета Python для измерения скорости загрузки и выгрузки?


Я пишу код python, чтобы найти пропускную способность между сервером и клиентом. Она основана на speedtest.net функциональность, в которой я отправляю фиктивный файл для расчета скорости. Проблема, с которой я сталкиваюсь, - это однонаправленная пропускная способность. Как работать над передачей файлов с клиента на сервер и измерять скорость загрузки, а также одно и то же время? Я буду признателен Вам за ваши предложения по этому поводу. Вот код.

Server.py

import socket

import os

port = 60000
s = socket.socket()
host = socket.gethostname()
print host
s.bind((host, port))
s.listen(5)

print 'Server listening....'

while True:
    conn, addr = s.accept()
    print 'Got connection from', addr
    data = conn.recv(1024)
    print('Server received', repr(data))

    filename = 'ak.zip'
    b = os.path.getsize(filename)
    f = open(filename, 'rb')
    l = f.read(b)

    while (l):
        conn.send(l)

        l = f.read(b)
    f.close()

    print('Done sending')
    conn.send('Thank you for connecting')
    conn.close()


Client.py

import socket
import time
import os

s = socket.socket()
host = socket.gethostname()
port = 60000
print host
t1 = time.time()
s.connect((host, port))
s.send("Hello server!")

with open('received_file1', 'wb') as f:
    print 'file opened'
    t2 = time.time()
    while True:

        data = s.recv(1024)

        f.write(data)
        t3 = time.time()

        if not data:
            break


    d = os.path.getsize('received_file1')
print data
print d
print 'Total:', t3 - t1
print 'Throughput:', round((d * 0.001) / (t3 - t1), 3),
print 'K/sec.'
f.close()
print('Successfully received the file')
s.close()
print('connection closed')


Вывод на стороне клиента файл открыт

Итого: 0.0469999313354
Пропускная способность: 136213,986 к / сек.
Успешно получен файл
соединение закрыто


Что я уже пробовал:

Работали, чтобы найти пропускную способность в одном направлении, но не смогли сделать этого для другого направления (в то же время)

Richard MacCutchan

Для запуска теста загрузки вам потребуется отдельное соединение между клиентом и сервером. Но это будет очень неэффективно.

Member 14841130

возможность создания zip-папки на клиенте с таким же размером, но без файлов внутри zip-папки на клиенте. пожалуйста, предлагаем

0 Ответов