Python套接字服务器/客户端不循环
我正在开发一个通过套接字连接的两个客户端处理的数字猜测游戏,但由于某些原因,在初始循环后,它停止工作,并且不发送/接收任何内容。第一次代码执行得很好,但无论我做了什么更改,第二次我要么在服务器文件中的Python套接字服务器/客户端不循环,python,python-sockets,Python,Python Sockets,我正在开发一个通过套接字连接的两个客户端处理的数字猜测游戏,但由于某些原因,在初始循环后,它停止工作,并且不发送/接收任何内容。第一次代码执行得很好,但无论我做了什么更改,第二次我要么在服务器文件中的guessNumber=int(s.recv(4096).decode()行收到错误,在该行中,它报告了试图将'更改为int的错误。这意味着它没有收到值(在这些情况下,客户端程序也不会收到“您的猜测是什么?”字符串)。 然而,下面的代码在初始循环之后没有做任何事情,如果您猜到第一个循环上的数字,那么
guessNumber=int(s.recv(4096).decode()
行收到错误,在该行中,它报告了试图将'
更改为int的错误。这意味着它没有收到值(在这些情况下,客户端程序也不会收到“您的猜测是什么?”
字符串)。
然而,下面的代码在初始循环之后没有做任何事情,如果您猜到第一个循环上的数字,那么它就可以正常工作,您的分数被写入一个文件,并且它们都应该结束
但是如果您不这样做,那么它也不会做任何事情,因此任何帮助都将不胜感激。它使用空闲的IDE在Python3.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()
原来客户端在第一次迭代后关闭了它的套接字,因为它以接收结束。我在每次接收后都添加了一些发送确认,告诉服务器它已成功执行,现在一切正常了!我尝试通过Visual Studio 2013运行它们,现在它将运行2~3次迭代,然后再次运行st我已经确定它正在运行从服务器向客户端发送提示的代码,但是客户端没有接收到提示,因此也没有发送结果,导致服务器和客户端陷入僵局
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()