[英]Prevent connected socket from closing in Python
我有一個像客戶端一樣的簡單功能。 它會發送一條事件消息並等待確認(為簡單起見,我刪除了該部分)。 之后它會收到更多消息:
def send_data(message):
"""Connect to server and get requests"""
sock = socket.socket()
host = 'localhost'
port = 8000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host,port))
try:
if message:
sock.sendall(message)
# Look for the response
has_request = False
while not has_request:
data = sock.recv(1024)
#First I get ACK, code not listed here...
#Next iteration, I got my request message
has_request = True
finally:
print >> sys.stderr, 'Closing socket'
sock.close()
return data
我在__main__
語句中調用它:
if __name__ == '__main__':
server_data = send_data(event)
if server_data:
parse_request(server_data)
但是我需要防止套接字自動關閉。 因為我在解析請求后必須發送另一條消息。 我刪除了sock.close(),但套接字仍然關閉。 這是因為我正在撤回數據並且我不在函數范圍內嗎?
我只想在我的程序中隨時連接,然后接收和發送消息,沒有任何問題。
當你走到send_data
方法之外時,你的套接字sock
將不再被任何人引用,所以垃圾收集器將完成他的工作並刪除該對象,這將關閉套接字(即使沒有close()
調用)。
如果使用數據返回套接字對象並將其放入主要部分,則套接字仍將被引用而不會關閉。
def create_socket():
sock = socket.socket()
host = 'localhost'
port = 8000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host,port))
return sock
def send_data(message, sock):
"""Get requests"""
if message:
sock.sendall(message)
# Look for the response
has_request = False
while not has_request:
data = sock.recv(1024)
#First I get ACK, code not listed here...
#Next iteration, I got my request message
has_request = True
return data
if __name__ == '__main__':
server_sock = create_socket()
server_data = send_data(event, server_sock)
if server_data:
parse_request(server_data, server_sock)
#no more use of server_socket ?
server_sock.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.