Я пытаюсь перенести данные с компьютера под управлением 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())