Python'da basit bir ağ 'oyunu' uyguladım - sunucu rastgele bir sayı çiziyor ve sonra istemci bunu tahmin etmeye çalışıyor. Uygulamam, müşteri sayıyı tahmin ettiğinde harika çalışıyor, sunucudan ayrılıyor (istemci tarafında ele alınmaktadır). Ancak, doğru tahminden sonra, sayı hala aynıdır. Uygulamayı değiştirmek istiyorum, böylece müşteri sayıyı tahmin ettiğinde, sunucu yeni bir numara atamalı, böylece diğer müşteriler yeni bir tane tahmin etmelidir. Bunu nasıl yapabilirim?İstemcinin iş parçacığından (threading, python) sunucunun değişkenini değiştirin
Bazı şablon, sadece soruna bir dikkat çekmek için:
#!/usr/bin/env python
from random import randint
import socket, select
from time import gmtime, strftime
import threading
import sys
class Handler(threading.Thread):
def __init__(self, connection, randomnumber):
threading.Thread.__init__(self)
self.connection = connection
self.randomnumber = randomnumber
def run(self):
while True:
try:
data = self.connection.recv(1024)
if data:
print data
try:
num = int(data)
if Server.guess(num) :
msg = "You won! This is the right number!"
self.connection.send(msg)
break
else :
msg = "Try again!"
self.connection.send(msg)
except ValueError, e:
msg = "%s" % e
self.connection.send(msg)
else:
msg = "error"
self.connection.send(msg)
except socket.error:
self.connection.close()
break
self.connection.close()
class Server:
def __init__(self, ip, port):
self.ip = ip
self.port = port
self.address = (self.ip, self.port)
self.server_socket = None
self.randnum = randint(1, 100)
@classmethod
def guess(cls, no):
if cls.randnum == no:
cls.randnum = randint(1, 1000)
result = True
else:
result = False
return reslut
def run(self):
try:
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind((self.ip, self.port))
self.server_socket.listen(10)
print 'Num is %s' % self.randnum
while True:
connection, (ip, port) = self.server_socket.accept()
c = Handler(connection, self.randnum)
c.start()
except socket.error, e:
if self.server_socket:
self.server_socket.close()
sys.exit(1)
if __name__ == '__main__':
s = Server('127.0.0.1', 1234)
s.run()
her istemci tahmin gerektiğini kendi rastgele sayı elde mıdır veya sadece olmalı tüm müşterilerin tahmin edeceği bir rasgele sayı? – shanmuga
@shanmuga: Tüm müşterilerin tahmin etmesi gereken yalnızca bir rastgele sayı olmalıdır. Bir müşteri bunu tahmin ettiğinde sayı değişmelidir. – yak