我正在制作一个刽子手游戏。我试图发送到服务器,如果输了== 7,然后loseGame = true。而在客户端,如果lostGame是真的,打印出游戏已经丢失。我匹配发送和recv,但它不工作,并继续要求输入猜猜信。你知道我做错了吗?
我认为这就是我认为问题所在的问题所在。
谢谢!
服务器:
import sys
# Import socket library
from socket import *
if sys.argv.__len__() != 2:
serverPort = 5895
# Get port number from command line
else:
serverPort = int(sys.argv[1])
# Choose SOCK_STREAM, which is TCP
# This is a welcome socket
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# Start listening on specified port
serverSocket.bind(('', serverPort))
# Listener begins listening
serverSocket.listen(1)
print("The server is ready to receive")
#Set secret word
word = 'arkansas'
linesForString = ''
#Prints out number of letters
for x in word:
linesForString += '_'
newWord = 'arkansas'
# Wait for connection and create a new socket
# It blocks here waiting for connection
connectionSocket, addr = serverSocket.accept()
win = ' '
#Sends lines of words
linesInBytes = linesForString.encode('utf-8')
connectionSocket.send(linesInBytes)
lose = 0
while 1:
l = list(word)
list2 = list(linesForString)
win = False
while 1:
while win == False:
losee = 0
# Receives Letter
letter = connectionSocket.recv(1024)
letterString = letter.decode('utf-8')
for x in range(len(list2)):
if(list2[x] == '_'):
if(letterString == l[x]):
list2[x] = letterString
for x in range(len(word)):
if(letterString == word[x]):
losee = -1
if (losee != -1):
lose += 1
print(lose)
newWord = "".join(list2)
#Sends newWord
newWordInBytes = newWord.encode('utf-8')
connectionSocket.send(newWordInBytes, lose)
if(newWord == 'arkansas'):
win = True
winGame = 'You have won the game'
winGameInBytes = winGame.encode('utf-8')
connectionSocket.send(winGameInBytes)
connectionSocket.close()
if(lose == 7):
loseGame = 'true'
connectionSocket.close()
else:
loseGame = 'false'
#THIS IS WHERE THE PROBLEM IS
loseGameInBytes = loseGame.encode('utf-8')
connectionSocket.send(loseGameInBytes)
# Close connection to client but do not close welcome socket
connectionSocket.close()
客户端:
import sys
# Import socket library
from socket import *
if sys.argv.__len__() != 3:
serverName = 'localhost'
serverPort = 5895
# Get from command line
else:
serverName = sys.argv[1]
serverPort = int(sys.argv[2])
# Choose SOCK_STREAM, which is TCP
clientSocket = socket(AF_INET, SOCK_STREAM)
# Connect to server using hostname/IP and port
clientSocket.connect((serverName, serverPort))
#Recieves lines of words
linesInBytes = clientSocket.recv(1024)
lines = linesInBytes.decode('utf-8')
for x in lines:
print(x, end = " ")
while 1:
# Get letter from user
print('\n')
letter = input('Guess a letter: ')
# Sends letter
letterBytes = letter.encode('utf-8')
clientSocket.send(letterBytes)
#Recieves newWord
newWordInBytes = clientSocket.recv(1024)
newWord = newWordInBytes.decode('utf-8')
for x in newWord:
print(x, end = " ")
print(" ")
if(newWord == 'arkansas'):
winGameInBytes = clientSocket.recv(1024)
winGame = winGameInBytes.decode('utf-8')
print(winGame)
clientSocket.close()
break
#THIS IS WHERE THE PROBLEM IS
loseGame = " "
loseGameInBytes = clientSocket.recv(1024)
loseGame = loseGame.encode('utf-8')
if(loseGame == "true"):
print('You have lost the game!')
clientSocket.close()
答案 0 :(得分:0)
我遇到的一些问题,直到我能够解决它:
1.当你输入时注意使用raw_input,否则它会为我崩溃。
2.你认为服务器中存在问题的地方确实存在问题。您不小心关闭连接,然后在游戏丢失后发送
3.在客户端中,您有loseGame = loseGame.encode('utf-8')
而不是loseGame = loseGameInBytes.encode('utf-8')
4.我将打印语句更改为print(str(x) + " "),
,因为你的问题是
这是我修复后的代码。请注意,我更改并在服务器中添加了不必要的中断,它们将导致服务器在单个游戏结束时关闭。
服务器代码:
import sys
# Import socket library
from socket import *
if sys.argv.__len__() != 2:
serverPort = 5895
# Get port number from command line
else:
serverPort = int(sys.argv[1])
# Choose SOCK_STREAM, which is TCP
# This is a welcome socket
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# Start listening on specified port
serverSocket.bind(('', serverPort))
# Listener begins listening
serverSocket.listen(1)
print("The server is ready to receive")
#Set secret word
word = 'respecttheplatypus'
linesForString = ''
#Prints out number of letters
for x in word:
linesForString += '_'
newWord = 'respecttheplatypus'
# Wait for connection and create a new socket
# It blocks here waiting for connection
connectionSocket, addr = serverSocket.accept()
win = ' '
#Sends lines of words
linesInBytes = linesForString.encode('utf-8')
connectionSocket.send(linesInBytes)
lose = 0
while 1:
l = list(word)
list2 = list(linesForString)
win = False
while 1:
while win == False:
losee = 0
# Receives Letter
letter = connectionSocket.recv(1024)
letterString = letter.decode('utf-8')
for x in range(len(list2)):
if(list2[x] == '_'):
if(letterString == l[x]):
list2[x] = letterString
for x in range(len(word)):
if(letterString == word[x]):
losee = -1
if (losee != -1):
lose += 1
print(lose)
newWord = "".join(list2)
#Sends newWord
newWordInBytes = newWord.encode('utf-8')
connectionSocket.send(newWordInBytes, lose)
if(newWord == 'respecttheplatypus'):
win = True
winGame = 'You have won the game'
winGameInBytes = winGame.encode('utf-8')
connectionSocket.send(winGameInBytes)
connectionSocket.close()
else:
if(lose == 7):
loseGame = 'true'
loseGameInBytes = loseGame.encode('utf-8')
print(loseGame)
connectionSocket.send(loseGameInBytes)
connectionSocket.close()
break
else:
loseGame = 'false'
#THIS IS WHERE THE PROBLEM IS
loseGameInBytes = loseGame.encode('utf-8')
print(loseGame)
connectionSocket.send(loseGameInBytes)
break
break
客户代码:
import sys
# Import socket library
from socket import *
if sys.argv.__len__() != 3:
serverName = 'localhost'
serverPort = 5895
# Get from command line
else:
serverName = sys.argv[1]
serverPort = int(sys.argv[2])
# Choose SOCK_STREAM, which is TCP
clientSocket = socket(AF_INET, SOCK_STREAM)
# Connect to server using hostname/IP and port
clientSocket.connect((serverName, serverPort))
#Recieves lines of words
linesInBytes = clientSocket.recv(1024)
lines = linesInBytes.decode('utf-8')
for x in lines:
print(str(x) + " "),
while 1:
# Get letter from user
print('\n')
letter = raw_input('Guess a letter: ')
# Sends letter
letterBytes = letter.encode('utf-8')
clientSocket.send(letterBytes)
#Recieves newWord
newWordInBytes = clientSocket.recv(len(linesInBytes))
newWord = newWordInBytes.decode('utf-8')
for x in newWord:
print(str(x) + " "),
print(" ")
if(newWord == 'respecttheplatypus'):
winGameInBytes = clientSocket.recv(1024)
winGame = winGameInBytes.decode('utf-8')
print(winGame)
clientSocket.close()
break
#THIS IS WHERE THE PROBLEM IS
loseGame = " "
loseGameInBytes = clientSocket.recv(1024)
loseGame = loseGameInBytes.encode('utf-8')
print("lose game is" + str(loseGame))
if(loseGame == "true"):
print('You have lost the game!')
clientSocket.close()