Python循环中的套接字程序
我试图做的是从客户端获取一封信,将其发送到服务器,让服务器进行一些更改并将其发送回。然后我希望客户端显示它。但我很难把它变成一个循环。我希望它不断地要求一封信,直到win等于true。我该怎么做?我尝试在服务器端添加一个while循环,但得到了一个关于错误文件描述符的错误。谢谢大家! 客户:Python循环中的套接字程序,python,sockets,Python,Sockets,我试图做的是从客户端获取一封信,将其发送到服务器,让服务器进行一些更改并将其发送回。然后我希望客户端显示它。但我很难把它变成一个循环。我希望它不断地要求一封信,直到win等于true。我该怎么做?我尝试在服务器端添加一个while循环,但得到了一个关于错误文件描述符的错误。谢谢大家! 客户: import sys from socket import * if sys.argv.__len__() != 3: serverName = 'localhost' serverPort =
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()
此序列图可能有助于您构建应用程序。尝试根据图表修改您的程序,并告诉我们您发现了哪些问题
您没有展示我们可以测试的完整示例。@adrio我刚刚添加了所有代码!非常感谢。您正试图发送给他“但是客户没有在听”。然后,客户端发送一封信,服务器接收并解码该信,然后用丢失的字母组成新词,客户端接收并打印该新词,然后关闭连接。同时,服务器将新词作为内部的
重新生成,而没有中断,并尝试在一个关闭的连接上再次发送,从而导致该错误。你无法知道他猜到了哪些字母,客户端没有循环,客户端没有听开头的空单词。@Adrio我对python socket编程一无所知,所以你能告诉我如何修复它吗?我无法理解客户端和服务器之间的同步。我将把循环放在客户机端的什么地方?我想如果您在用例中执行类似的操作,您可能会明白这一点: