【发布时间】:2017-10-17 15:21:19
【问题描述】:
我想做的是从客户端获取一封信,将其发送到服务器,让服务器进行一些更改并将其发回。然后我希望客户端显示它。但我很难把它变成一个循环。我希望它不断地请求一封信,直到 win 等于 true。我怎样才能做到这一点?我尝试在服务器端添加一个 while 循环,但收到有关文件描述符错误的错误。谢谢!
客户:
import sys
from socket import *
if sys.argv.__len__() != 3:
serverName = 'localhost'
serverPort = 5555
else:
serverName = sys.argv[1]
serverPort = int(sys.argv[2])
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
# Get letter from user
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')
print(newWord)
clientSocket.close()
服务器:
import sys
from socket import *
if sys.argv.__len__() != 2:
serverPort = 5555
else:
serverPort = int(sys.argv[1])
# This is a welcome socket
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
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 += '_ '
while 1:
# 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)
while 1:
# Receives Letter
letter = connectionSocket.recv(1024)
letterString = letter.decode('utf-8')
win = False
while win == False:
newWord = ' '
for x in word:
if(letterString == x):
newWord += x
else:
newWord += '_ '
#Sends newWord
newWordInBytes = newWord.encode('utf-8')
connectionSocket.send(newWordInBytes)
if(newWord == 'Arkansas'):
win = True
print('You have won the game')
else:
win = False
# Close connection to client but do not close welcome socket
connectionSocket.close()
【问题讨论】:
-
您没有展示我们可以测试的完整示例。
-
@Adirio 我刚刚添加了我所有的代码!谢谢!
-
您正试图向他发送` _ _ _ _ _ _ _ _ `,但客户端没有收听。然后客户端正在发送一个字母,服务器正在接收和解码它,并形成一个缺少字母的新单词,客户端正在接收和打印,然后关闭连接。同时,服务器将新单词重新生成为内部
while没有中断并尝试在关闭的连接上再次发送它,从而给您该错误。你无法知道他猜到了哪些字母,你在客户端没有循环,你不听客户端的初始空词。 -
@Adirio 我对 python 套接字编程完全陌生,所以你能否指出我如何解决它的正确方向?我无法理解客户端和服务器之间的同步。我应该把循环放在客户端的哪里?
-
我想如果你用你的用例做这样的事情你可能会明白:upload.wikimedia.org/wikipedia/commons/thumb/9/9b/…