Member 12746605 Ответов: 1

Неправильный вывод пропускной способности через Python между сервером и клиентом


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

server.py

import socket

import os

port = 60000
s = socket.socket()
host = socket.gethostname()
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='akki.txt'
   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

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

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

        data = s.recv(1024)

        if not data:
            break

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

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


Вывод при отправке akki.txt

Вывод Сервера

Сервер слушает....
Получил соединение от ('10.143.47.165', 60902)
("Сервер получен", " Привет, сервер!"")
Сделано отправка


Открыт выходной файл клиента

Необработанные таймеры: 1503350568.11 1503350568.11 1503350568.11
Итого: 0.00499987602234
** Пропускная способность: 204,805 к / сек.**
Успешно получен файл
соединение закрыто
Выход для ak.zip ( какой файл больше)


Открыт выходной файл клиента

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


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

Выход меняется. Например, если я использую файл с меньшим размером, пропускная способность больше, однако если я отправляю файл с большим размером, пропускная способность меньше. Я ищу решение, чтобы получить постоянную пропускную способность между двумя одноранговыми узлами.

1 Ответов

Рейтинг:
5

Member 1091218

измените эту строку на

print 'Throughput:', round((1024.0 * 0.001) / (t3 - t1), 3),

print 'Throughput:', round((totalbytesreceived * 0.001) / (t3 - t1), 3),

где totalbytesreceived будет размером полученного файла