【问题标题】:Python client keeps loosing connection to tcp socket connectionPython客户端不断失去与tcp套接字连接的连接
【发布时间】:2021-01-19 06:25:44
【问题描述】:

我正在编写一个使用 TCP 连接 SOCK_STREAM 的 python 服务器客户端。

我能够从客户端建立一个连接,然后服务器返回响应。

我看到的第二次连接丢失

这是服务器代码

from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
serverPort = 62175
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print('The server is ready to receive information')
connectionSocket, addr = serverSocket.accept()
while True:
       sentence = connectionSocket.recv(1024).decode()
       capitalizedSentence = sentence.upper()
       connectionSocket.send(capitalizedSentence.encode()) 
       connectionSocket.close()

这是客户端的代码

from socket import *
import sys
import re

serverName = 'localhost'
serverPort = 62175
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
regex = re.compile('[@_!#$%^&*()<>?/\|}{~:]')
done = False
while done == False:
    sentence = input("Input a lowercase sentence: ")
    try:
        inputValue = int(sentence)
        print("Input data is an integer, suppose to be a string, Run the program again")
    except ValueError:     
        try:
            if(regex.search(sentence) == None):   
                if (sentence.lower() == "quit"):
                    done = True
                    clientSocket.close()
                elif (sentence == ""):
                    print("There wasn't any input detected. Try again")
                else:
                    clientSocket.sendall(sentence.encode())
                    modifiedSentence = clientSocket.recv(1024)
                    print(modifiedSentence.decode())
                    print(done)
            else:
                print("String contains special characters, Try again")
        except OSError as err:
            print("OS error: {0}".format(err))

这是我输入第二个输入时的输出和错误

Input a lowercase sentence: test
TEST
False
Input a lowercase sentence: test
OS error: [WinError 10053] An established connection was aborted by the software in your host machine

感谢您的帮助

【问题讨论】:

    标签: python-3.x sockets websocket


    【解决方案1】:

    您的服务器关闭循环内的连接,但尝试通过关闭的套接字进行通信:

    connectionSocket, addr = serverSocket.accept()
    while True:
           sentence = connectionSocket.recv(1024).decode()
           ...
           connectionSocket.close()
    

    要在连接中处理多个recvsend,您应该仅在实际完成后调用close

    connectionSocket, addr = serverSocket.accept()
    while True:
           sentence = connectionSocket.recv(1024).decode()
           ...
    connectionSocket.close()
    

    【讨论】:

    • 尝试添加到循环中但出现操作系统错误:[WinError 10053] 已建立的连接被主机中的软件中止...
    • @JoseOrtiz:我看到您的服务器的意图与我最初的想法略有不同,并且错误出现在不同的地方。修正了答案。
    • 那行得通... python缩进对我来说没有意义.....所以缩进回到左边使得connectionSocket.close不是从句子到代码的一部分编码())?
    • @JoseOrtiz: “python 缩进对我来说没有意义” - Python 中的正确缩进是该语言最重要的部分之一。我认为在做更多 Python 之前,你需要了解这些是如何工作的。简而言之:缩进描述它属于哪个块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2012-09-28
    • 2010-12-20
    相关资源
    最近更新 更多