2017-01-02 3 views
0

Ich spiele in letzter Zeit mit Python herum und versuche zu lernen, wie man einen Python-Server mithilfe von TCP-Verbindungen baut.Python - Zählzeiten, die ein Server vom Client erhält?

Ich habe diesen Code, der einen Server läuft ...

import socket 
from threading import * 
import datetime 
import time 


serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
host = "localhost" 
port = 8000 
print (host) 
print (port) 

serversocket.bind((host, port)) 

class client(Thread): 

    def __init__(self, socket, address): 
     Thread.__init__(self) 
     self.sock = socket 
     self.addr = address 
     self.start() 


    def run(self): 

     while 1: 

      st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') 
      #cName = 
      print(self.sock.recv(1024).decode()+' sent @ '+ st + ':' , self.sock.recv(1024).decode()) 

      self.sock.send(b'Processing!') 





serversocket.listen(5) 
print ('server started and listening') 
while 1: 
    clientsocket, address = serversocket.accept() 
    client(clientsocket, address) 

Und zwei davon client.py

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
host ="localhost" 
port =8000 
cName = 'client 2' # or client 1 
s.connect((host,port)) 

def ts(str): 
    s.sendall(cName.encode()) 
    s.send('e'.encode()) 
    data = '' 
    data = s.recv(1024).decode() 
    print (data) 

while 2: 
    r = input('enter') 
    ts(s) 

s.close() 

Ich möchte wissen, wie der Server zu ermöglichen und Spur zu halten zu zählen wie oft es eine Nachricht von Client 1 und Client 2 erhält.

Zum Beispiel, wenn Server beginnt mit Count von 0 (zB count = 0). Und jedes Mal Client 1 oder Client 2 se Wenn Sie eine Nachricht zurücksenden oder in diesem Fall Treffer eingeben, wird die Anzahl erhöht (count += 1). Wenn ich einen print(count) anrufe, sollte der Ausgang 1 sein.

Danke?

Antwort

1

Ich denke, Sie können eine globale Variable (zB count=0) in Ihrem ersten Skript (Server-Skript) erstellen und erhöhen Sie den Wert jedes Mal, wenn Sie die Nachricht von einem Client erhalten.

Ihre run-Methode kann also werden

def run(self): 
     global count 
     while 1: 

      st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S') 
      #cName = 
      print(self.sock.recv(1024).decode()+' sent @ '+ st + ':' , self.sock.recv(1024).decode()) 
      count += 1 
      self.sock.send(b'Processing!') 

Wenn Sie wollen, dass die Zählung spezifischen dann sein Client ein Wörterbuch von Zählungen statt einer einzigen Ganzzahl erzeugen und halten Sie die jeweilige ganze Zahl erhöht wird auf etwas, was über eine Überprüfung Klient.

Verwandte Themen