我正在处理通过套接字连接的两个客户端处理的数字猜谜游戏,但由于某种原因,在初始循环后它停止工作并且不发送/接收任何内容。代码全部第一次执行正常,但无论我改变什么,第二次我在服务器文件中的行guessNumber = int(s.recv(4096).decode()
处得到错误 - 它报告错误尝试更改{{1进入一个int。这意味着它没有收到值(在这些情况下,客户端程序也没有收到''
字符串)。
然而,下面的代码在初始循环之后没有做任何事情,如果您猜测第一个循环上的数字然后它工作正常,您的分数将被写入文件,它们都会按照应有的结束。
但如果你不这样做,那么它也没有做任何事情,所以任何帮助都会受到赞赏。它使用IDLE IDE在Python 3.4.2中运行。
服务器:
"What is your guess? "
客户端:
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()
答案 0 :(得分:0)
事实证明,客户端在第一次迭代后关闭了它的套接字,因为它以接收结束。我在每次收到后都添加了一些发送确认信息,告诉服务器它已成功执行,现在一切正常!