Отправить непрерывные данные клиенту с сервера Python - PullRequest
0 голосов
/ 20 марта 2019

Я пишу программу для непрерывной отправки данных Клиенту с Сервера.Здесь я использую временную метку для примера, чтобы отправить ее нескольким клиентам, которые подключены.Я использовал многопоточность для поддержки нескольких клиентов.Я хочу, чтобы время отправлялось каждые 10 секунд клиенту.но в моем коде клиент останавливается после получения первых данных.Как заставить клиента постоянно получать данные.Я пытался добавить цикл while на стороне клиента, но это не позволяет.Любые предложения, пожалуйста

Вот пример кода: сторона сервера:

import socket
import os
from threading import Thread
import thread
import threading
import time
import datetime

def listener(client, address):
    print "Accepted connection from: ", address
    with clients_lock:
        clients.add(client)
    try:    
        while True:
            data = client.recv(1024)
            if not data:
                break
            else:
                print repr(data)
                with clients_lock:
                    for c in clients:
                        c.sendall(data)
    finally:
        with clients_lock:
            clients.remove(client)
            client.close()

clients = set()
clients_lock = threading.Lock()

host = socket.gethostname()
port = 10016

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(3)
th = []

while True:
    print "Server is listening for connections..."
    client, address = s.accept()
    timestamp = datetime.datetime.now().strftime("%I:%M:%S %p")
    client.send(timestamp) 
    time.sleep(10)
    th.append(Thread(target=listener, args = (client,address)).start())
s.close()

сторона клиента:

import socket
import os
from threading import Thread


import socket
import time

s = socket.socket()  
host = socket.gethostname()        
port = 10016



s.connect((host, port))
print (s.recv(1024)) 
s.close() 


# close the connection 

Мой вывод:

01:15:10

Требуемый вывод на клиентах:

01:15:10
01:15:20
01:15:30
#and should go on

1 Ответ

1 голос
/ 20 марта 2019

На стороне сервера

while True:
    client, address = s.accept()
    th.append(Thread(target=listener, args = (client,address)).start())
s.close()

В def listener () измените цикл while, чтобы непрерывно отправлять данные для каждого потока, как этот

while True:
        data = client.recv(1024)
        if data == '0':
            timestamp = datetime.datetime.now().strftime("%I:%M:%S %p")
            client.send(timestamp)
            time.sleep(2)

на стороне клиента, добавьте эту строку в цикл while дляотправить некоторые данные для выполнения условия if

s.connect((host, port))
while True:
    s.send('0')
    print(s.recv(1024))
#s.close()
...