Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环中的套接字程序_Python_Sockets - Fatal编程技术网

Python循环中的套接字程序

Python循环中的套接字程序,python,sockets,Python,Sockets,我试图做的是从客户端获取一封信,将其发送到服务器,让服务器进行一些更改并将其发送回。然后我希望客户端显示它。但我很难把它变成一个循环。我希望它不断地要求一封信,直到win等于true。我该怎么做?我尝试在服务器端添加一个while循环,但得到了一个关于错误文件描述符的错误。谢谢大家! 客户: import sys from socket import * if sys.argv.__len__() != 3: serverName = 'localhost' serverPort =

我试图做的是从客户端获取一封信,将其发送到服务器,让服务器进行一些更改并将其发送回。然后我希望客户端显示它。但我很难把它变成一个循环。我希望它不断地要求一封信,直到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()

此序列图可能有助于您构建应用程序。尝试根据图表修改您的程序,并告诉我们您发现了哪些问题


您没有展示我们可以测试的完整示例。@adrio我刚刚添加了所有代码!非常感谢。您正试图发送给他“但是客户没有在听”。然后,客户端发送一封信,服务器接收并解码该信,然后用丢失的字母组成新词,客户端接收并打印该新词,然后关闭连接。同时,服务器将新词作为内部的
重新生成,而
没有中断,并尝试在一个关闭的连接上再次发送,从而导致该错误。你无法知道他猜到了哪些字母,客户端没有循环,客户端没有听开头的空单词。@Adrio我对python socket编程一无所知,所以你能告诉我如何修复它吗?我无法理解客户端和服务器之间的同步。我将把循环放在客户机端的什么地方?我想如果您在用例中执行类似的操作,您可能会明白这一点: