0

Я хочу знать, это потому что я получаю с ума это:Как узнать количество клиентов, подключенных к серверу, и вернуть количество подключенных клиентов пользователю?

Как я могу сделать это:

1-Если сервер прекращает клиенты должны прекратить также. Ваш сервер должен позволить администратору закрыть все подключения (то есть сервер должен дождаться, когда пользователь завершит программу, предпочтительно, через интерфейс меню)

2-Чтобы узнать количество подключенных клиентов, вам нужно будет идентифицировать каждый клиент уникальным образом - это можно выполнить, используя pid, который уникально назначен для каждого клиентского соединения (сохраните их в глобальном списке). Эти подключения могут динамически меняться (например, клиенты могут отключиться и повторно подключиться), поэтому вы должны поддерживать этот список на сервере. Это мой код на стороне сервера:

Заранее спасибо

import _thread 
import socket 
import sys 
from datetime import datetime 



def serveclient(c): 
    global v, nclient, vlock, nclientlock 
    while(True): 
     k=(c.recv(1)).decode('utf-8') 
     if(k==''): 
      break 
     if(k=='D'): 
      today = str(datetime.now().strftime('%Y-%m-%d')) 
      c.send(today.encode('utf-8')) 
     if(k=='T'): 
      tme = str(datetime.now().strftime('%H:%M:%S')) 
      c.send(tme.encode('utf-8')) 
     if(k=='X'): 
        <<<< # Here I should put the number of clients connected and echo back the number like the above code 
     vlock.acquire() 
     v+=k 
     vlock.release() 

     #Echo back 
     c.send(v.encode('utf-8')) 
    c.close() #End connection 
    nclientlock.acquire() 
    nclient-=1 
    nclientlock.release() 

#Main driver code 
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
port = int(sys.argv[1]) 
listener.bind(('',port)) 
listener.listen(5) 

#Initialize global data 
v='' 
vlock=_thread.allocate_lock() 
nclient=10  #Max number of clients 
nclientlock=_thread.allocate_lock() 

#accept calls from clients 
for i in range(nclient): 
    (client, ap) = listener.accept() 
    _thread.start_new_thread(serveclient, (client,)) 

listener.close() 
while nclient >0: 
    pass #do nothing, just wait for client count to drop to zero 

print('The final string is: ', v) 

<<<<<<<<<<<<<<<<<<<<<<<<<This the Client Code>>>>>>>>>>>>>>>>>>>>>>> 

#Client Program. Sends a single char at a time to the server until the client 
    #sends a '', this will terminate the client. 
    # 
    #usage: python server port 

    import socket 
    import sys 

    #create the socket 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

    host = sys.argv[1]  #Server info from cmd line 
    port = int(sys.argv[2]) #Port from cmd line 

    #Conncet to server 
    s.connect((host, port)) 

    while(True): 
     #get letter 
     k = input('enter a letter: ') 
     s.send(k.encode('utf-8')) 
     if(k==''): 
      break 
     v=s.recv(1024) #receive upto 1024 bytes 
     print(v.decode('utf-8')) 

    s.close() 

ответ

0

Просто увеличивает подсчет каждый раз, когда вы принимаете сокет, и уменьшить его каждый раз, когда вы закрываете обслуживаемый сокет.

Смежные вопросы