Python套接字服务器/客户端没有循环

时间:2014-10-31 17:56:06

标签: python python-sockets

我正在处理通过套接字连接的两个客户端处理的数字猜谜游戏,但由于某种原因,在初始循环后它停止工作并且不发送/接收任何内容。代码全部第一次执行正常,但无论我改变什么,第二次我在服务器文件中的行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()  

1 个答案:

答案 0 :(得分:0)

事实证明,客户端在第一次迭代后关闭了它的套接字,因为它以接收结束。我在每次收到后都添加了一些发送确认信息,告诉服务器它已成功执行,现在一切正常!