Smack Alpha
Smack Alpha

Reputation: 1980

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

Upvotes: 4

Views: 7119

Answers (1)

user69659
user69659

Reputation: 199

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

Upvotes: 5

Related Questions