улучшение скорости передачи сокета - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь перенести данные с компьютера под управлением Windows (клиент) на компьютер под управлением Linux (сервер), используя библиотеку сокетов из python.

У меня есть следующий код для сервера и клиента:

Клиент:

Следующая функция используется моей основной программой для отправки данных.Например, send_message (data.encode ());где «данные» меняются каждую секунду и имеют формат int.

def send_message(message):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Connect the socket to the port on the server
    # given by the caller
    server_address = ('10.46.24.858' 10000)
    #print('connecting to {} port {}'.format(*server_address))
    sock.connect(server_address)    
    sock.sendall(message)   
    print(message)

Sever:

def main():
 sock= socket.socket.AF_INET,socket.SOCK_STREAM)
 server_address = ('10.46.24.858', 10000)
 sock.bind(server_address)
 sock.listen(1)
 while True:
     connection,clientaddress = sock.accept()
     data = connection.recv(16)
     print('recieved,%s',data)

if __name__ == "__main__":
 main()

Клиентская функция send_message (), используется моей основной программой для отправки данныхэто постоянно меняется каждую секунду.Но с текущим кодом скорость передачи данных очень низкая, и в результате большинство данных не передается / пропускается.Есть ли способ улучшить скорость передачи?Я действительно отправляю данные гораздо быстрее.Я что-то упустил или что-то не так с моим кодом?

EDIT-1 Следуя предложению @ JohanL, вместо создания новой связи каждый раз, когда я хотел передать данные, я оставлял сокет Open.Это улучшило скорость, но мне действительно нужно, чтобы она была близка к мгновенной.

новый код КЛИЕНТА:

def main(): 
   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # Connect the socket to the port on the server
    # given by the caller
    server_address = ('10.46.24.858' 10000)
    #print('connecting to {} port {}'.format(*server_address))
    sock.connect(server_address

   # some algorithm with outputs 'data'
     sock.sendall(data.encode())

1 Ответ

0 голосов
/ 16 октября 2018

Меняя носок на:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

Сделал трюк.Спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...