1
我正在處理通過套接字連接的兩個客戶端處理的數字猜測遊戲,但由於某種原因,在初始循環後它停止工作並且不發送/接收任何東西。代碼在第一次執行時都會正常運行,但無論我更改了什麼,第二次我都會在服務器文件的guessNumber = int(s.recv(4096).decode()
行發生錯誤 - 它會報告嘗試將''
更改爲int的錯誤。這意味着它沒有收到值(在這些情況下,客戶端程序也沒有收到"What is your guess? "
字符串)。 但是,下面的代碼只是在初始循環之後沒有做任何事情,如果您猜測第一個循環的編號,那麼它可以正常工作,您的分數被寫入文件,並且它們都以它們應該結束的方式結束。Python套接字服務器/客戶端不循環
但是,如果你不這樣做,它也不會做任何事情,所以任何幫助,將不勝感激。它使用IDLE IDE在Python 3.4.2中運行。
服務器:
import socket
import random
l = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
score = 0
guessNumber = 0
def within(value, goal, n):
numDifference = abs(value - goal)
if (numDifference <= n):
return True
else:
return False
scoreFile = open('scores', 'a')
randomNumber = random.randrange(0, 11)
l.bind(("127.0.0.1", 4001))
l.listen(5)
print("Waiting...")
while True:
(s,ca)=l.accept()
print("Connection from", ca)
while (not(within(guessNumber, randomNumber, 0))):
s.sendall("What is your guess? ".encode())
guessNumber = int(s.recv(4096).decode())
score += 1
print ("%d" % guessNumber)
if (within(guessNumber, randomNumber, 0)):
s.sendall(("You guessed correctly! \n Your score is %d" % score).encode())
scoreFile.write("Player %s has a score of %d \n" % (ca, score))
scoreFile.close()
s.sendall("1".encode())
elif (within(guessNumber, randomNumber, 3)):
s.sendall("You are getting close!".encode())
s.sendall("0".encode())
else:
s.sendall("You are way off".encode())
s.sendall("0".encode())
s.close()
客戶:
import socket
gameOver = False
guessNumber = 0
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 4001))
while (gameOver != "1"):
#Send guess
guessNumber = input(s.recv(4096).decode())
s.sendall(guessNumber.encode())
#Recieve result
print(s.recv(4096).decode())
#Check whether game is over or not
gameOver = s.recv(4096).decode()
print ("Game Over")
s.close()
我試着通過Visual Studio 2013運行它們,它現在將運行2〜3次迭代,再次停止在同一點工作。我確定它正在運行代碼以將提示從服務器發送到客戶端,但是客戶端沒有收到它,所以沒有發送結果,導致服務器和客戶端達到僵局 – 2014-11-02 20:12:38