我正在学习套接字和连接,并试图编写一个简单的服务器Python脚本,该脚本将消息回显到客户端。 我首先运行一个脚本,该脚本打印从套接字接收的内容。 因此,我正在运行我在本地编写的内容,并使用Putty作为客户端(因此该消息尚未打印到Putty会话中)。
这是我的代码:
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT)) # bind accepts a tuple of a hostname or address and a port
s.listen()
conn, addr = s.accept() # returns a pair
with conn:
print("Connection started!", conn, addr)
data = conn.recv(1024)
while data:
data = data.decode("UTF-8")
print(data)
# if data == "exit":
# shutdown and close the connection,
# and ofcourse exit the two with as blocks gracefully
data = conn.recv(1024)
print("Connection is closed and the program continued")
运行此方法有效,但是我无法终止其他连接然后杀死服务器。 我相信数据永远都是真实的,因为我使用的是腻子,而且即使我在连接窗口中没有输入文本的情况下按回车键,它实际上也会发送此信息:
b'\r\n'
因此,我尝试将其放置在带注释的if语句中:
conn.shutdown(socket.SHUT_RDWR)
conn.close()
希望这样做只会删除套接字-但这没用。
所以我想做的是退出with块并删除套接字,而不必引发任何异常或使程序停止。我尝试使用python 3更改套接字以使其与with-as语句一起使用。我尝试仅调用conn .__ exit__或s .__ exit__函数,但这也无法正常工作。
如何使用用户输入关闭插座并使用块退出两个插座?我在这里对套接字模块有什么困惑吗?