Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send Continuous Data to Client from Server python

I am writing a program to send the data continuously to the Client from the Server. In here, i am using a timestamp for sample to send it to the multiple Clients who are connected. I have used multi-threading to support multiple Clients. I want the time to be sent every 10 seconds to the client. but in my code, the client stops after receiving the first data. How to make client continuously receive the data. I tried adding while loop in Client Side but it doesn't make it possible. Any suggestions please

Here's the sample Code: Server Side:

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()

Client Side:

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 

My output:

01:15:10

Required Output on clients:

01:15:10
01:15:20
01:15:30
#and should go on
like image 202
Smack Alpha Avatar asked Oct 21 '25 16:10

Smack Alpha


1 Answers

Server side

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

In def listener() change while loop to continuously send data for each thread like this

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

at client side add this line in while loop to send some data to satisfy the if condition

s.connect((host, port))
while True:
    s.send('0')
    print(s.recv(1024))
#s.close()
like image 189
user69659 Avatar answered Oct 23 '25 04:10

user69659



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!