gpt4 book ai didi

Python连续TCP连接

转载 作者:可可西里 更新时间:2023-11-01 02:50:43 25 4
gpt4 key购买 nike

我是套接字编程的新手,正在尝试重新使用 Python。我想编写一个简单的 TCP 程序,它将持续保持连接直到达到某个结束状态,在这种情况下,“关闭”是由客户端发送的。

这在第一次迭代时工作正常,但它在我发送的第二个东西上卡住,我不确定为什么。有人可以解释为什么我的程序卡住或如何更好地实现它吗?

TCPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print('The server is ready to recieve')

while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
if(sentence == "close"):
connectionSocket.close()
capSentence = sentence.upper()
connectionSocket.send(capSentence.encode())

TCP客户端.py

from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
while(1):
sentence = raw_input('input sentence: ')
if(sentence == "close"):
break
clientSocket.send(sentence.encode())
retSentence = clientSocket.recv(1024)
print('From server; ', retSentence.decode())

clientSocket.close()

最佳答案

服务器存在多个问题。我会尝试指出我看到的内容。

它在您发送的第二个东西上卡住,因为如果接收到的数据不等于“close”,服务器永远不会第二次尝试从客户端套接字读取。您需要另一个循环来完成此操作,例如:

while True:
connectionSocket, addr = serverSocket.accept()

while True:
sentence = connectionSocket.recv(1024).decode()
if sentence == "close": break
capSentence = sentence.upper()
connectionSocket.send(capSentence.encode())

connectionSocket.close()

此外,请注意服务器同步运行循环,因此在第一个连接关闭之前它无法接受第二个连接。

最后,您缺少错误处理代码。如果客户端过早断开连接,整个服务器将崩溃。


如果您的目标是让服务器仅处理单个 连接然后终止,最简单的解决方案是将accept() 调用移到主循环之外(否则您会在每次迭代 上等待 连接)。

connectionSocket, addr = serverSocket.accept()

# Destroy the server socket; we don't need it anymore since we are not
# accepting any connections beyond this point.
serverSocket.close()

while True:
sentence = connectionSocket.recv(1024).decode()
if(sentence == "close"):
connectionSocket.close()
break
capSentence = sentence.upper()
connectionSocket.send(capSentence.encode())

关于Python连续TCP连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com