2017-01-02 76 views
0

我最近在玩python,並試圖學習如何使用TCP連接來構建python服務器。Python - 計數服務器從客戶端接收請求的次數?

我有這樣的代碼運行的服務器...

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) 

其中兩種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() 

我想知道如何讓服務器計算和跟蹤它接收來自客戶端1和客戶端2的消息的次數。

例如,如果服務器從0開始計數(例如,count = 0)。並且每次客戶端1或客戶端2 se發回一條消息,或者在這種情況下,命中輸入,計數將會增加(count += 1)。如果我要求print(count),則輸出應爲1

謝謝?

回答

1

我認爲你可以在你的第一個腳本(服務器腳本)中創建一個全局變量(比如count=0),並在每次從客戶端收到消息時都繼續增加值。

所以你的run方法可以成爲,

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!') 

如果你想在計數爲特定的客戶端,然後創建計數,而不是一個整數的字典和不斷遞增的驗證有關的一些事物的各個整數客戶。

相關問題